فهرست منبع

20250211 优化调整

贾小兵 2 هفته پیش
والد
کامیت
2df300ee9e

+ 250 - 118
application/admin/controller/student/Collection.php

@@ -244,14 +244,12 @@ class Collection extends Backend
                 //根据故障部位 数组
                 $fault_arr = [$fault_right_list[0]['fault_id'],$fault_right_list[1]['fault_id'],$fault_right_list[2]['fault_id']];
 
-            
                 //根据故障部位查找,匹配的排除方法
                 $paichu_arr = Report::where(['bw_id'=>['in',$fault_arr],'sim_type'=>$info['sim_type']])->column('pc_id');
 
                 //查找故障现象 数组
                 $partent_fault_id = Fault::where(['fault_id'=>['in',$fault_arr],'sim_type'=>$info['sim_type']])->column('parent_fault_id');
 
-
                 //根据故障部位查找,匹配可能原因
                 $yy_arr = Fault::where(['parent_fault_id'=>['in',$partent_fault_id],'sim_type'=>$info['sim_type'],'fault_type'=>2])->column('fault_id');
 
@@ -261,130 +259,264 @@ class Collection extends Backend
                     foreach ($other_report as $key => $em){
                         //故障现象
                         $xianxian_arr[] = $em['xx_id'];
-                        //故障部位
-                        $buwei_arr[] = $em['bw_id'];
-                        //可能原因
-                        foreach(explode(',',$em['yy_id']) as $k3 =>$t13){
-                            $yuanyin_arr[] = $t13;
-                        }
-                        //排除方法
-                        $fangfa_arr[] = $em['pc_id'];
                     }
-                }
-                
-                //故障现象 分数 start
-                foreach ($partent_fault_id as $k1 =>$t){
-                    if(!in_array($t,$xianxian_arr)){
-                        $xianxian_score = 1+$xianxian_score;
-                        $xianxian_content[] = [
-                            'cx_id'=>$t,
-                            'cx_type'=>'少写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t])->value('name'),
-                        ];
+                    foreach ($partent_fault_id as $k1 =>$t){
+                        if(!in_array($t,$xianxian_arr)){
+                            $xianxian_score = 5+$xianxian_score;
+                            $xianxian_content[] = [
+                                'gzxz_id'=>$t,
+                                'cx_id'=>$t,
+                                'cx_type'=>'故障现象少写',
+                                'cx_name'=>Fault::where(['fault_id'=>$t])->value('name'),
+                            ];
+                        }else{
+                            // echo "存在里面".$t."###".$k1."<br/>";
+                            $jian = '';
+                            foreach ($other_report as $ky => $item) {
+                                if ($item['xx_id'] == $t) {
+                                   $jian = $ky;
+                                }
+                            }
+                            // echo $jian."<br/>";
+
+                            // 故障部位算分 start
+                            //获取故障部位 
+                            $buweiarr = Fault::where(['parent_fault_id'=>$t,'sim_type'=>$info['sim_type'],'fault_type'=>['in',[3,30]],'fault_state'=>0])
+                            ->column('fault_id');
+                            if(!in_array($other_report[$jian]['bw_id'],$buweiarr)){
+                                $buwei_score = 1+$buwei_score;
+                                $xianxian_content[] = [
+                                    'gzxz_id'=>$t,
+                                    'cx_id'=>$other_report[$jian]['bw_id'],
+                                    'cx_type'=>'故障部位错写',
+                                    'cx_name'=>Fault::where(['fault_id'=>$other_report[$jian]['bw_id']])->value('name'),
+                                ];
+                            }
+                            //出题故障部位和获取的故障部位里面有重复的
+                            // 获取两个数组的交集
+                            $intersection = array_intersect($buweiarr, $fault_arr);
+                            // halt($intersection);
+                            foreach($intersection as $kk =>$va){
+                                if($other_report[$jian]['bw_id']!=$va){
+                                    $buwei_score = 1+$buwei_score;
+                                    $xianxian_content[] = [
+                                        'gzxz_id'=>$t,
+                                        'cx_id'=>$va,
+                                        'cx_type'=>'故障部位少写',
+                                        'cx_name'=>Fault::where(['fault_id'=>$va])->value('name'),
+                                    ];
+                                }
+                            }
+                            unset($va);
+                            // 故障部位算分 end
+                            
+                            // 排除方法算分 start
+                            $paichuarr = Fault::where(['parent_fault_id'=>$t,'sim_type'=>$info['sim_type'],'fault_type'=>4,'fault_state'=>0])
+                            ->column('fault_id');
+                            if(!in_array($other_report[$jian]['pc_id'],$paichuarr)){
+                                $fangfa_score = 1+$fangfa_score;
+                                $xianxian_content[] = [
+                                    'gzxz_id'=>$t,
+                                    'cx_id'=>$other_report[$jian]['pc_id'],
+                                    'cx_type'=>'排除方法错写',
+                                    'cx_name'=>Fault::where(['fault_id'=>$other_report[$jian]['pc_id']])->value('name'),
+                                ];
+                            }
+                            //出题排除方法和获取的排除方法里面有重复的
+                            // 获取两个数组的交集
+                            $intersection1 = array_intersect($paichuarr, $paichu_arr);
+                            foreach($intersection1 as $kk1 =>$va1){
+                                if($other_report[$jian]['pc_id']!=$va1){
+                                    $fangfa_score = 1+$fangfa_score;
+                                    $xianxian_content[] = [
+                                        'gzxz_id'=>$t,
+                                        'cx_id'=>$va1,
+                                        'cx_type'=>'排除方法少写',
+                                        'cx_name'=>Fault::where(['fault_id'=>$va1])->value('name'),
+                                    ];
+                                }
+                            }
+                            unset($va1);
+                            // 排除方法算分 end
+                            
+                            // 可能原因算分 start
+                            $yuanyinarr = Fault::where(['parent_fault_id'=>$t,'sim_type'=>$info['sim_type'],'fault_type'=>2,'fault_state'=>0])
+                            ->column('fault_id');
+                            foreach (explode(',',$other_report[$jian]['yy_id']) as $key => $value) {
+                                if(!in_array($value,$yuanyinarr)){
+                                    $yuanyin_socre = 1+$yuanyin_socre;
+                                    $xianxian_content[] = [
+                                        'gzxz_id'=>$t,
+                                        'cx_id'=>$value,
+                                        'cx_type'=>'可能原因错写',
+                                        'cx_name'=>Fault::where(['fault_id'=>$value])->value('name'),
+                                    ];
+                                }
+                            }
+                            //出题可能原因和获取的可能原因里面有重复的
+                            // 获取两个数组的交集
+                            $intersection2 = array_intersect($yy_arr, $yuanyinarr);
+                            $intersection22 = array_intersect($intersection2, explode(',',$other_report[$jian]['yy_id']));
+                            foreach($yuanyinarr as $kk2 =>$va2){
+                                if(!in_array($va2,$intersection22)){
+                                    $yuanyin_socre = 1+$yuanyin_socre;
+                                    $xianxian_content[] = [
+                                        'gzxz_id'=>$t,
+                                        'cx_id'=>$va2,
+                                        'cx_type'=>'可能原因少写',
+                                        'cx_name'=>Fault::where(['fault_id'=>$va2])->value('name'),
+                                    ];
+                                }
+                                
+                            }
+                            unset($va2);
+                            // 可能原因算分 end
+                        }
                     }
-                }
-                foreach ($xianxian_arr as $k2 =>$t2){
-                    if(!in_array($t2,$partent_fault_id)){
-                        $xianxian_score = 1+$xianxian_score;
+                    unset($em);
+                }else{
+                    foreach ($partent_fault_id as $key => $em){
+                        $xianxian_score = 5+$xianxian_score;
                         $xianxian_content[] = [
-                            'cx_id'=>$t2,
-                            'cx_type'=>'错写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t2])->value('name'),
+                            'gzxz_id'=>$em,
+                            'cx_id'=>$em,
+                            'cx_type'=>'故障现象少写',
+                            'cx_name'=>Fault::where(['fault_id'=>$em])->value('name'),
                         ];
                     }
+                    unset($em);
                 }
-                //故障现象 end
-
 
-                //故障部位 start
-                foreach ($fault_arr as $k11 =>$t11){
-                    if(!in_array($t11,$buwei_arr)){
-                        $buwei_score = 1+$buwei_score;
-                        $buwei_content[] = [
-                            'cx_id'=>$t11,
-                            'cx_type'=>'少写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t11])->value('name'),
-                        ];
-                    }
-                }
-                foreach ($buwei_arr as $k12 =>$t12){
-                    if(!empty($t12) && !in_array($t12,$fault_arr)){
-                        //错写
-                        $buwei_score = 1+$buwei_score;
-                        $buwei_content[] = [
-                            'cx_id'=>$t12,
-                            'cx_type'=>'错写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t12])->value('name'),
-                        ];
-                    }
-                }
-                //故障部位 end
-                
-
-                //排除方法 start
-                //循环固定的排除方法,匹配作答的排除方法
-                foreach ($paichu_arr as $k21 =>$t21){
-                    if(!in_array($t21,$fangfa_arr)){
-                        $fangfa_score = 1+$fangfa_score;
-                        $fangfa_content[] = [
-                            'cx_id'=>$t21,
-                            'cx_type'=>'少写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t21])->value('name'),
-                        ];
-                    }
-                }
-                //循环作答的排除方法,,匹配固定的排除方法
-                foreach ($fangfa_arr as $k22 =>$t22){
-                    if(!empty($t22) && !in_array($t22,$paichu_arr)){
-                        $fangfa_score = 1+$fangfa_score;
-                        $fangfa_content[] = [
-                            'cx_id'=>$t22,
-                            'cx_type'=>'错写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t22])->value('name'),
-                        ];
-                    }
-                }
-                //排除方法 end
-
-                //可能原因 start
-                //循环固定的可能原因,匹配作答的可能原因
-                foreach ($yy_arr as $k31 =>$t31){
-                    if(!in_array($t31,$yuanyin_arr)){
-                        // echo $t31."<br/>";
-                        $yuanyin_socre = 1+$yuanyin_socre;
-                        $yuanyin_content[] = [
-                            'cx_id'=>$t31,
-                            'cx_type'=>'少写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t31])->value('name'),
-                        ];
-                    }
-                }
-                //循环作答的排除方法,匹配固定的排除方法
-                foreach ($yuanyin_arr as $k32 =>$t32){
-                    if(!empty($t32) && !in_array($t32,$yy_arr)){
-                        $yuanyin_socre = 1+$yuanyin_socre;
-                        $yuanyin_content[] = [
-                            'cx_id'=>$t32,
-                            'cx_type'=>'错写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t32])->value('name'),
-                        ];
-                    }
-                }
-                //判断答案是否有重复回答的
-                $uniqueArray = array_unique($yuanyin_arr);
-                $diff = array_diff_assoc($yuanyin_arr, $uniqueArray);
-                if(!empty($diff)){
-                    foreach ($diff as $k323 =>$t323){
-                        $yuanyin_socre = 1+$yuanyin_socre;
-                        $yuanyin_content[] = [
-                            'cx_id'=>$t323,
-                            'cx_type'=>'错写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t323])->value('name'),
-                        ];
-                    }
-                }
-                //可能原因 end
+                // echo "故障现象得分:".$xianxian_score."<br/>";
+                // echo "故障部位得分:".$buwei_score."<br/>";
+                // echo "排除方法得分:".$fangfa_score."<br/>";
+                // echo "可能原因得分:".$yuanyin_socre."<br/>";
+                // echo "<pre>";
+                // print_r($xianxian_content);
+                // die();
                 
+                // $other_report = json_decode($params['other_report'],true);
+                // if(!empty($other_report)){
+                //     foreach ($other_report as $key => $em){
+                //         //故障现象
+                //         $xianxian_arr[] = $em['xx_id'];
+                //         //故障部位
+                //         $buwei_arr[] = $em['bw_id'];
+                //         //可能原因
+                //         foreach(explode(',',$em['yy_id']) as $k3 =>$t13){
+                //             $yuanyin_arr[] = $t13;
+                //         }
+                //         //排除方法
+                //         $fangfa_arr[] = $em['pc_id'];
+                //     }
+                // }
+                // //故障现象 分数 start
+                // foreach ($partent_fault_id as $k1 =>$t){
+                //     if(!in_array($t,$xianxian_arr)){
+                //         $xianxian_score = 1+$xianxian_score;
+                //         $xianxian_content[] = [
+                //             'cx_id'=>$t,
+                //             'cx_type'=>'少写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t])->value('name'),
+                //         ];
+                //     }
+                // }
+                // foreach ($xianxian_arr as $k2 =>$t2){
+                //     if(!in_array($t2,$partent_fault_id)){
+                //         $xianxian_score = 1+$xianxian_score;
+                //         $xianxian_content[] = [
+                //             'cx_id'=>$t2,
+                //             'cx_type'=>'错写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t2])->value('name'),
+                //         ];
+                //     }
+                // }
+                // //故障现象 end
+                // //故障部位 start
+                // foreach ($fault_arr as $k11 =>$t11){
+                //     if(!in_array($t11,$buwei_arr)){
+                //         $buwei_score = 1+$buwei_score;
+                //         $buwei_content[] = [
+                //             'cx_id'=>$t11,
+                //             'cx_type'=>'少写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t11])->value('name'),
+                //         ];
+                //     }
+                // }
+                // foreach ($buwei_arr as $k12 =>$t12){
+                //     if(!empty($t12) && !in_array($t12,$fault_arr)){
+                //         //错写
+                //         $buwei_score = 1+$buwei_score;
+                //         $buwei_content[] = [
+                //             'cx_id'=>$t12,
+                //             'cx_type'=>'错写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t12])->value('name'),
+                //         ];
+                //     }
+                // }
+                // //故障部位 end
+                // //排除方法 start
+                // //循环固定的排除方法,匹配作答的排除方法
+                // foreach ($paichu_arr as $k21 =>$t21){
+                //     if(!in_array($t21,$fangfa_arr)){
+                //         $fangfa_score = 1+$fangfa_score;
+                //         $fangfa_content[] = [
+                //             'cx_id'=>$t21,
+                //             'cx_type'=>'少写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t21])->value('name'),
+                //         ];
+                //     }
+                // }
+                // //循环作答的排除方法,,匹配固定的排除方法
+                // foreach ($fangfa_arr as $k22 =>$t22){
+                //     if(!empty($t22) && !in_array($t22,$paichu_arr)){
+                //         $fangfa_score = 1+$fangfa_score;
+                //         $fangfa_content[] = [
+                //             'cx_id'=>$t22,
+                //             'cx_type'=>'错写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t22])->value('name'),
+                //         ];
+                //     }
+                // }
+                // //排除方法 end
+                // //可能原因 start
+                // //循环固定的可能原因,匹配作答的可能原因
+                // foreach ($yy_arr as $k31 =>$t31){
+                //     if(!in_array($t31,$yuanyin_arr)){
+                //         // echo $t31."<br/>";
+                //         $yuanyin_socre = 1+$yuanyin_socre;
+                //         $yuanyin_content[] = [
+                //             'cx_id'=>$t31,
+                //             'cx_type'=>'少写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t31])->value('name'),
+                //         ];
+                //     }
+                // }
+                // //循环作答的排除方法,匹配固定的排除方法
+                // foreach ($yuanyin_arr as $k32 =>$t32){
+                //     if(!empty($t32) && !in_array($t32,$yy_arr)){
+                //         $yuanyin_socre = 1+$yuanyin_socre;
+                //         $yuanyin_content[] = [
+                //             'cx_id'=>$t32,
+                //             'cx_type'=>'错写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t32])->value('name'),
+                //         ];
+                //     }
+                // }
+                // //判断答案是否有重复回答的
+                // $uniqueArray = array_unique($yuanyin_arr);
+                // $diff = array_diff_assoc($yuanyin_arr, $uniqueArray);
+                // if(!empty($diff)){
+                //     foreach ($diff as $k323 =>$t323){
+                //         $yuanyin_socre = 1+$yuanyin_socre;
+                //         $yuanyin_content[] = [
+                //             'cx_id'=>$t323,
+                //             'cx_type'=>'错写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t323])->value('name'),
+                //         ];
+                //     }
+                // }
+                // //可能原因 end
                 $weixiu_score = $xianxian_score+$yuanyin_socre+$buwei_score+$fangfa_score;
                 if($weixiu_score>15){
                     $weixiu_score = 15;

+ 16 - 1
application/admin/controller/student/Exam.php

@@ -88,8 +88,23 @@ class Exam extends Backend
             $row['fangfa_content_name'] = json_decode($row['fangfa_content'],true);
         }
         $other_report = !empty($row['other_report']) ? json_decode($row['other_report'],true):[];
-        $this->view->assign('other_report', $other_report);
         
+        $fault_right_list = Db::name('real_exam_fault')->where(['exam_id'=>$ids,'flag'=>1])->select();
+        //根据故障部位 数组
+        $fault_arr = [$fault_right_list[0]['fault_id'],$fault_right_list[1]['fault_id'],$fault_right_list[2]['fault_id']];
+
+        //查找故障现象 数组
+        $partent_fault_id = Fault::where(['fault_id'=>['in',$fault_arr],'sim_type'=>$rows['sim_type']])->column('parent_fault_id');
+        $arr1= [];
+        foreach ($partent_fault_id as $key => $value) {
+            $arr1[] = [
+                'gzxz_id' => $value,
+                'xianxian_content' => $row['xianxian_content_name'],
+                'other_report' => $other_report
+            ];
+        }
+        $this->view->assign('other_report', $other_report);
+        $this->view->assign('partent_fault_id', $arr1);
         $this->view->assign('row', $row);
         return $this->view->fetch();
     }

+ 275 - 117
application/admin/controller/student/Exercise.php

@@ -161,16 +161,25 @@ class Exercise extends Backend
             $fault_two_score = 25;
             $fault_three_score = 25;
 
+            //故障现象
             $xianxian_score = 0;
-            $yuanyin_socre= 0;
+            $xianxian_arr = [];
+            $xianxian_content = [];
+
+            //故障部位
             $buwei_score= 0;
-            $fangfa_score= 0;
+            $buwei_arr = [];
+            $buwei_content = [];
 
-            $xianxian_arr = [];
+            //可能原因
+            $yuanyin_socre= 0;
             $yuanyin_arr = [];
-            $buwei_arr = [];
+            $yuanyin_content = [];
+
+            //排除方法
+            $fangfa_score= 0;
             $fangfa_arr = [];
-            $jielun_score = 0;
+            $fangfa_content = [];
 
 
             Db::startTrans();
@@ -241,127 +250,261 @@ class Exercise extends Backend
                     foreach ($other_report as $key => $em){
                         //故障现象
                         $xianxian_arr[] = $em['xx_id'];
-                        //故障部位
-                        $buwei_arr[] = $em['bw_id'];
-                        //可能原因
-                        foreach(explode(',',$em['yy_id']) as $k3 =>$t13){
-                            $yuanyin_arr[] = $t13;
-                        }
-                        //排除方法
-                        $fangfa_arr[] = $em['pc_id'];
                     }
-                }
-                
-                //故障现象 分数 start
-                foreach ($partent_fault_id as $k1 =>$t){
-                    if(!in_array($t,$xianxian_arr)){
-                        $xianxian_score = 1+$xianxian_score;
-                        $xianxian_content[] = [
-                            'cx_id'=>$t,
-                            'cx_type'=>'少写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t])->value('name'),
-                        ];
+                    foreach ($partent_fault_id as $k1 =>$t){
+                        if(!in_array($t,$xianxian_arr)){
+                            $xianxian_score = 5+$xianxian_score;
+                            $xianxian_content[] = [
+                                'gzxz_id'=>$t,
+                                'cx_id'=>$t,
+                                'cx_type'=>'故障现象少写',
+                                'cx_name'=>Fault::where(['fault_id'=>$t])->value('name'),
+                            ];
+                        }else{
+                            // echo "存在里面".$t."###".$k1."<br/>";
+                            $jian = '';
+                            foreach ($other_report as $ky => $item) {
+                                if ($item['xx_id'] == $t) {
+                                   $jian = $ky;
+                                }
+                            }
+                            // echo $jian."<br/>";
+
+                            // 故障部位算分 start
+                            //获取故障部位 
+                            $buweiarr = Fault::where(['parent_fault_id'=>$t,'sim_type'=>$info['sim_type'],'fault_type'=>['in',[3,30]],'fault_state'=>0])
+                            ->column('fault_id');
+                            if(!in_array($other_report[$jian]['bw_id'],$buweiarr)){
+                                $buwei_score = 1+$buwei_score;
+                                $xianxian_content[] = [
+                                    'gzxz_id'=>$t,
+                                    'cx_id'=>$other_report[$jian]['bw_id'],
+                                    'cx_type'=>'故障部位错写',
+                                    'cx_name'=>Fault::where(['fault_id'=>$other_report[$jian]['bw_id']])->value('name'),
+                                ];
+                            }
+                            //出题故障部位和获取的故障部位里面有重复的
+                            // 获取两个数组的交集
+                            $intersection = array_intersect($buweiarr, $fault_arr);
+                            // halt($intersection);
+                            foreach($intersection as $kk =>$va){
+                                if($other_report[$jian]['bw_id']!=$va){
+                                    $buwei_score = 1+$buwei_score;
+                                    $xianxian_content[] = [
+                                        'gzxz_id'=>$t,
+                                        'cx_id'=>$va,
+                                        'cx_type'=>'故障部位少写',
+                                        'cx_name'=>Fault::where(['fault_id'=>$va])->value('name'),
+                                    ];
+                                }
+                            }
+                            unset($va);
+                            // 故障部位算分 end
+                            
+                            // 排除方法算分 start
+                            $paichuarr = Fault::where(['parent_fault_id'=>$t,'sim_type'=>$info['sim_type'],'fault_type'=>4,'fault_state'=>0])
+                            ->column('fault_id');
+                            if(!in_array($other_report[$jian]['pc_id'],$paichuarr)){
+                                $fangfa_score = 1+$fangfa_score;
+                                $xianxian_content[] = [
+                                    'gzxz_id'=>$t,
+                                    'cx_id'=>$other_report[$jian]['pc_id'],
+                                    'cx_type'=>'排除方法错写',
+                                    'cx_name'=>Fault::where(['fault_id'=>$other_report[$jian]['pc_id']])->value('name'),
+                                ];
+                            }
+                            //出题排除方法和获取的排除方法里面有重复的
+                            // 获取两个数组的交集
+                            $intersection1 = array_intersect($paichuarr, $paichu_arr);
+                            foreach($intersection1 as $kk1 =>$va1){
+                                if($other_report[$jian]['pc_id']!=$va1){
+                                    $fangfa_score = 1+$fangfa_score;
+                                    $xianxian_content[] = [
+                                        'gzxz_id'=>$t,
+                                        'cx_id'=>$va1,
+                                        'cx_type'=>'排除方法少写',
+                                        'cx_name'=>Fault::where(['fault_id'=>$va1])->value('name'),
+                                    ];
+                                }
+                            }
+                            unset($va1);
+                            // 排除方法算分 end
+                            
+                            // 可能原因算分 start
+                            $yuanyinarr = Fault::where(['parent_fault_id'=>$t,'sim_type'=>$info['sim_type'],'fault_type'=>2,'fault_state'=>0])
+                            ->column('fault_id');
+                            foreach (explode(',',$other_report[$jian]['yy_id']) as $key => $value) {
+                                if(!in_array($value,$yuanyinarr)){
+                                    $yuanyin_socre = 1+$yuanyin_socre;
+                                    $xianxian_content[] = [
+                                        'gzxz_id'=>$t,
+                                        'cx_id'=>$value,
+                                        'cx_type'=>'可能原因错写',
+                                        'cx_name'=>Fault::where(['fault_id'=>$value])->value('name'),
+                                    ];
+                                }
+                            }
+                            //出题可能原因和获取的可能原因里面有重复的
+                            // 获取两个数组的交集
+                            $intersection2 = array_intersect($yy_arr, $yuanyinarr);
+                            $intersection22 = array_intersect($intersection2, explode(',',$other_report[$jian]['yy_id']));
+                            foreach($yuanyinarr as $kk2 =>$va2){
+                                if(!in_array($va2,$intersection22)){
+                                    $yuanyin_socre = 1+$yuanyin_socre;
+                                    $xianxian_content[] = [
+                                        'gzxz_id'=>$t,
+                                        'cx_id'=>$va2,
+                                        'cx_type'=>'可能原因少写',
+                                        'cx_name'=>Fault::where(['fault_id'=>$va2])->value('name'),
+                                    ];
+                                }
+                                
+                            }
+                            unset($va2);
+                            // 可能原因算分 end
+                        }
                     }
-                }
-                foreach ($xianxian_arr as $k2 =>$t2){
-                    if(!in_array($t2,$partent_fault_id)){
-                        $xianxian_score = 1+$xianxian_score;
+                    unset($em);
+                }else{
+                    foreach ($partent_fault_id as $key => $em){
+                        $xianxian_score = 5+$xianxian_score;
                         $xianxian_content[] = [
-                            'cx_id'=>$t2,
-                            'cx_type'=>'错写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t2])->value('name'),
+                            'gzxz_id'=>$em,
+                            'cx_id'=>$em,
+                            'cx_type'=>'故障现象少写',
+                            'cx_name'=>Fault::where(['fault_id'=>$em])->value('name'),
                         ];
                     }
+                    unset($em);
                 }
-                //故障现象 end
+
+                // //获取数组
+                // $other_report = json_decode($params['other_report'],true);
+                // if(!empty($other_report)){
+                //     foreach ($other_report as $key => $em){
+                //         //故障现象
+                //         $xianxian_arr[] = $em['xx_id'];
+                //         //故障部位
+                //         $buwei_arr[] = $em['bw_id'];
+                //         //可能原因
+                //         foreach(explode(',',$em['yy_id']) as $k3 =>$t13){
+                //             $yuanyin_arr[] = $t13;
+                //         }
+                //         //排除方法
+                //         $fangfa_arr[] = $em['pc_id'];
+                //     }
+                // }
+                
+                // //故障现象 分数 start
+                // foreach ($partent_fault_id as $k1 =>$t){
+                //     if(!in_array($t,$xianxian_arr)){
+                //         $xianxian_score = 1+$xianxian_score;
+                //         $xianxian_content[] = [
+                //             'cx_id'=>$t,
+                //             'cx_type'=>'少写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t])->value('name'),
+                //         ];
+                //     }
+                // }
+                // foreach ($xianxian_arr as $k2 =>$t2){
+                //     if(!in_array($t2,$partent_fault_id)){
+                //         $xianxian_score = 1+$xianxian_score;
+                //         $xianxian_content[] = [
+                //             'cx_id'=>$t2,
+                //             'cx_type'=>'错写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t2])->value('name'),
+                //         ];
+                //     }
+                // }
+                // //故障现象 end
               
                 
-                //故障部位 start
-                foreach ($fault_arr as $k11 =>$t11){
-                    if(!in_array($t11,$buwei_arr)){
-                        $buwei_score = 1+$buwei_score;
-                        $buwei_content[] = [
-                            'cx_id'=>$t11,
-                            'cx_type'=>'少写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t11])->value('name'),
-                        ];
-                    }
-                }
-                foreach ($buwei_arr as $k12 =>$t12){
-                    if(!empty($t12) && !in_array($t12,$fault_arr)){
-                        //错写
-                        $buwei_score = 1+$buwei_score;
-                        $buwei_content[] = [
-                            'cx_id'=>$t12,
-                            'cx_type'=>'错写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t12])->value('name'),
-                        ];
-                    }
-                }
-                //故障部位 end
+                // //故障部位 start
+                // foreach ($fault_arr as $k11 =>$t11){
+                //     if(!in_array($t11,$buwei_arr)){
+                //         $buwei_score = 1+$buwei_score;
+                //         $buwei_content[] = [
+                //             'cx_id'=>$t11,
+                //             'cx_type'=>'少写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t11])->value('name'),
+                //         ];
+                //     }
+                // }
+                // foreach ($buwei_arr as $k12 =>$t12){
+                //     if(!empty($t12) && !in_array($t12,$fault_arr)){
+                //         //错写
+                //         $buwei_score = 1+$buwei_score;
+                //         $buwei_content[] = [
+                //             'cx_id'=>$t12,
+                //             'cx_type'=>'错写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t12])->value('name'),
+                //         ];
+                //     }
+                // }
+                // //故障部位 end
                 
-                //排除方法 start
-                //循环固定的排除方法,匹配作答的排除方法
-                foreach ($paichu_arr as $k21 =>$t21){
-                    if(!in_array($t21,$fangfa_arr)){
-                        $fangfa_score = 1+$fangfa_score;
-                        $fangfa_content[] = [
-                            'cx_id'=>$t21,
-                            'cx_type'=>'少写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t21])->value('name'),
-                        ];
-                    }
-                }
-                //循环作答的排除方法,,匹配固定的排除方法
-                foreach ($fangfa_arr as $k22 =>$t22){
-                    if(!empty($t22) && !in_array($t22,$paichu_arr)){
-                        $fangfa_score = 1+$fangfa_score;
-                        $fangfa_content[] = [
-                            'cx_id'=>$t22,
-                            'cx_type'=>'错写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t22])->value('name'),
-                        ];
-                    }
-                }
-                //排除方法 end
-
-                //可能原因 start
-                //循环固定的可能原因,匹配作答的可能原因
-                foreach ($yy_arr as $k31 =>$t31){
-                    if(!in_array($t31,$yuanyin_arr)){
-                        // echo $t31."<br/>";
-                        $yuanyin_socre = 1+$yuanyin_socre;
-                        $yuanyin_content[] = [
-                            'cx_id'=>$t31,
-                            'cx_type'=>'少写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t31])->value('name'),
-                        ];
-                    }
-                }
-                //循环作答的排除方法,,匹配固定的排除方法
-                foreach ($yuanyin_arr as $k32 =>$t32){
-                    if(!empty($t32) && !in_array($t32,$yy_arr)){
-                        $yuanyin_socre = 1+$yuanyin_socre;
-                        $yuanyin_content[] = [
-                            'cx_id'=>$t32,
-                            'cx_type'=>'错写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t32])->value('name'),
-                        ];
-                    }
-                }
-                $uniqueArray = array_unique($yuanyin_arr);
-                $diff = array_diff_assoc($yuanyin_arr, $uniqueArray);
-                if(!empty($diff)){
-                    foreach ($diff as $k323 =>$t323){
-                        $yuanyin_socre = 1+$yuanyin_socre;
-                        $yuanyin_content[] = [
-                            'cx_id'=>$t323,
-                            'cx_type'=>'错写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t323])->value('name'),
-                        ];
-                    }
-                }
-                //可能原因 end
+                // //排除方法 start
+                // //循环固定的排除方法,匹配作答的排除方法
+                // foreach ($paichu_arr as $k21 =>$t21){
+                //     if(!in_array($t21,$fangfa_arr)){
+                //         $fangfa_score = 1+$fangfa_score;
+                //         $fangfa_content[] = [
+                //             'cx_id'=>$t21,
+                //             'cx_type'=>'少写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t21])->value('name'),
+                //         ];
+                //     }
+                // }
+                // //循环作答的排除方法,,匹配固定的排除方法
+                // foreach ($fangfa_arr as $k22 =>$t22){
+                //     if(!empty($t22) && !in_array($t22,$paichu_arr)){
+                //         $fangfa_score = 1+$fangfa_score;
+                //         $fangfa_content[] = [
+                //             'cx_id'=>$t22,
+                //             'cx_type'=>'错写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t22])->value('name'),
+                //         ];
+                //     }
+                // }
+                // //排除方法 end
+
+                // //可能原因 start
+                // //循环固定的可能原因,匹配作答的可能原因
+                // foreach ($yy_arr as $k31 =>$t31){
+                //     if(!in_array($t31,$yuanyin_arr)){
+                //         // echo $t31."<br/>";
+                //         $yuanyin_socre = 1+$yuanyin_socre;
+                //         $yuanyin_content[] = [
+                //             'cx_id'=>$t31,
+                //             'cx_type'=>'少写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t31])->value('name'),
+                //         ];
+                //     }
+                // }
+                // //循环作答的排除方法,,匹配固定的排除方法
+                // foreach ($yuanyin_arr as $k32 =>$t32){
+                //     if(!empty($t32) && !in_array($t32,$yy_arr)){
+                //         $yuanyin_socre = 1+$yuanyin_socre;
+                //         $yuanyin_content[] = [
+                //             'cx_id'=>$t32,
+                //             'cx_type'=>'错写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t32])->value('name'),
+                //         ];
+                //     }
+                // }
+                // $uniqueArray = array_unique($yuanyin_arr);
+                // $diff = array_diff_assoc($yuanyin_arr, $uniqueArray);
+                // if(!empty($diff)){
+                //     foreach ($diff as $k323 =>$t323){
+                //         $yuanyin_socre = 1+$yuanyin_socre;
+                //         $yuanyin_content[] = [
+                //             'cx_id'=>$t323,
+                //             'cx_type'=>'错写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t323])->value('name'),
+                //         ];
+                //     }
+                // }
+                // //可能原因 end
                 
                 
                 $weixiu_score = $xianxian_score+$yuanyin_socre+$buwei_score+$fangfa_score;
@@ -499,7 +642,22 @@ class Exercise extends Backend
         }
 
         $other_report = !empty($row['other_report']) ? json_decode($row['other_report'],true):[];
+        $fault_right_list = Db::name('real_exam_fault')->where(['exam_id'=>$ids,'flag'=>1])->select();
+        //根据故障部位 数组
+        $fault_arr = [$fault_right_list[0]['fault_id'],$fault_right_list[1]['fault_id'],$fault_right_list[2]['fault_id']];
+
+        //查找故障现象 数组
+        $partent_fault_id = Fault::where(['fault_id'=>['in',$fault_arr],'sim_type'=>$rows['sim_type']])->column('parent_fault_id');
+        $arr1= [];
+        foreach ($partent_fault_id as $key => $value) {
+            $arr1[] = [
+                'gzxz_id' => $value,
+                'xianxian_content' => $row['xianxian_content_name'],
+                'other_report' => $other_report
+            ];
+        }
         $this->view->assign('other_report', $other_report);
+        $this->view->assign('partent_fault_id', $arr1);
         $this->view->assign('row', $row);
         return $this->view->fetch();
     }

+ 263 - 113
application/admin/controller/student/Practice.php

@@ -275,128 +275,262 @@ class Practice extends Backend
                     foreach ($other_report as $key => $em){
                         //故障现象
                         $xianxian_arr[] = $em['xx_id'];
-                        //故障部位
-                        $buwei_arr[] = $em['bw_id'];
-                        //可能原因
-                        foreach(explode(',',$em['yy_id']) as $k3 =>$t13){
-                            $yuanyin_arr[] = $t13;
-                        }
-                        //排除方法
-                        $fangfa_arr[] = $em['pc_id'];
                     }
-                }
-                
-                //故障现象 分数 start
-                foreach ($partent_fault_id as $k1 =>$t){
-                    if(!in_array($t,$xianxian_arr)){
-                        $xianxian_score = 1+$xianxian_score;
-                        $xianxian_content[] = [
-                            'cx_id'=>$t,
-                            'cx_type'=>'少写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t])->value('name'),
-                        ];
+                    foreach ($partent_fault_id as $k1 =>$t){
+                        if(!in_array($t,$xianxian_arr)){
+                            $xianxian_score = 5+$xianxian_score;
+                            $xianxian_content[] = [
+                                'gzxz_id'=>$t,
+                                'cx_id'=>$t,
+                                'cx_type'=>'故障现象少写',
+                                'cx_name'=>Fault::where(['fault_id'=>$t])->value('name'),
+                            ];
+                        }else{
+                            // echo "存在里面".$t."###".$k1."<br/>";
+                            $jian = '';
+                            foreach ($other_report as $ky => $item) {
+                                if ($item['xx_id'] == $t) {
+                                   $jian = $ky;
+                                }
+                            }
+                            // echo $jian."<br/>";
+
+                            // 故障部位算分 start
+                            //获取故障部位 
+                            $buweiarr = Fault::where(['parent_fault_id'=>$t,'sim_type'=>$info['sim_type'],'fault_type'=>['in',[3,30]],'fault_state'=>0])
+                            ->column('fault_id');
+                            if(!in_array($other_report[$jian]['bw_id'],$buweiarr)){
+                                $buwei_score = 1+$buwei_score;
+                                $xianxian_content[] = [
+                                    'gzxz_id'=>$t,
+                                    'cx_id'=>$other_report[$jian]['bw_id'],
+                                    'cx_type'=>'故障部位错写',
+                                    'cx_name'=>Fault::where(['fault_id'=>$other_report[$jian]['bw_id']])->value('name'),
+                                ];
+                            }
+                            //出题故障部位和获取的故障部位里面有重复的
+                            // 获取两个数组的交集
+                            $intersection = array_intersect($buweiarr, $fault_arr);
+                            // halt($intersection);
+                            foreach($intersection as $kk =>$va){
+                                if($other_report[$jian]['bw_id']!=$va){
+                                    $buwei_score = 1+$buwei_score;
+                                    $xianxian_content[] = [
+                                        'gzxz_id'=>$t,
+                                        'cx_id'=>$va,
+                                        'cx_type'=>'故障部位少写',
+                                        'cx_name'=>Fault::where(['fault_id'=>$va])->value('name'),
+                                    ];
+                                }
+                            }
+                            unset($va);
+                            // 故障部位算分 end
+                            
+                            // 排除方法算分 start
+                            $paichuarr = Fault::where(['parent_fault_id'=>$t,'sim_type'=>$info['sim_type'],'fault_type'=>4,'fault_state'=>0])
+                            ->column('fault_id');
+                            if(!in_array($other_report[$jian]['pc_id'],$paichuarr)){
+                                $fangfa_score = 1+$fangfa_score;
+                                $xianxian_content[] = [
+                                    'gzxz_id'=>$t,
+                                    'cx_id'=>$other_report[$jian]['pc_id'],
+                                    'cx_type'=>'排除方法错写',
+                                    'cx_name'=>Fault::where(['fault_id'=>$other_report[$jian]['pc_id']])->value('name'),
+                                ];
+                            }
+                            //出题排除方法和获取的排除方法里面有重复的
+                            // 获取两个数组的交集
+                            $intersection1 = array_intersect($paichuarr, $paichu_arr);
+                            foreach($intersection1 as $kk1 =>$va1){
+                                if($other_report[$jian]['pc_id']!=$va1){
+                                    $fangfa_score = 1+$fangfa_score;
+                                    $xianxian_content[] = [
+                                        'gzxz_id'=>$t,
+                                        'cx_id'=>$va1,
+                                        'cx_type'=>'排除方法少写',
+                                        'cx_name'=>Fault::where(['fault_id'=>$va1])->value('name'),
+                                    ];
+                                }
+                            }
+                            unset($va1);
+                            // 排除方法算分 end
+                            
+                            // 可能原因算分 start
+                            $yuanyinarr = Fault::where(['parent_fault_id'=>$t,'sim_type'=>$info['sim_type'],'fault_type'=>2,'fault_state'=>0])
+                            ->column('fault_id');
+                            foreach (explode(',',$other_report[$jian]['yy_id']) as $key => $value) {
+                                if(!in_array($value,$yuanyinarr)){
+                                    $yuanyin_socre = 1+$yuanyin_socre;
+                                    $xianxian_content[] = [
+                                        'gzxz_id'=>$t,
+                                        'cx_id'=>$value,
+                                        'cx_type'=>'可能原因错写',
+                                        'cx_name'=>Fault::where(['fault_id'=>$value])->value('name'),
+                                    ];
+                                }
+                            }
+                            //出题可能原因和获取的可能原因里面有重复的
+                            // 获取两个数组的交集
+                            $intersection2 = array_intersect($yy_arr, $yuanyinarr);
+                            $intersection22 = array_intersect($intersection2, explode(',',$other_report[$jian]['yy_id']));
+                            foreach($yuanyinarr as $kk2 =>$va2){
+                                if(!in_array($va2,$intersection22)){
+                                    $yuanyin_socre = 1+$yuanyin_socre;
+                                    $xianxian_content[] = [
+                                        'gzxz_id'=>$t,
+                                        'cx_id'=>$va2,
+                                        'cx_type'=>'可能原因少写',
+                                        'cx_name'=>Fault::where(['fault_id'=>$va2])->value('name'),
+                                    ];
+                                }
+                                
+                            }
+                            unset($va2);
+                            // 可能原因算分 end
+                        }
                     }
-                }
-                foreach ($xianxian_arr as $k2 =>$t2){
-                    if(!in_array($t2,$partent_fault_id)){
-                        $xianxian_score = 1+$xianxian_score;
+                    unset($em);
+                }else{
+                    foreach ($partent_fault_id as $key => $em){
+                        $xianxian_score = 5+$xianxian_score;
                         $xianxian_content[] = [
-                            'cx_id'=>$t2,
-                            'cx_type'=>'错写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t2])->value('name'),
+                            'gzxz_id'=>$em,
+                            'cx_id'=>$em,
+                            'cx_type'=>'故障现象少写',
+                            'cx_name'=>Fault::where(['fault_id'=>$em])->value('name'),
                         ];
                     }
+                    unset($em);
                 }
-                //故障现象 end
+                
+                // //获取数组
+                // $other_report = json_decode($params['other_report'],true);
+                // if(!empty($other_report)){
+                //     foreach ($other_report as $key => $em){
+                //         //故障现象
+                //         $xianxian_arr[] = $em['xx_id'];
+                //         //故障部位
+                //         $buwei_arr[] = $em['bw_id'];
+                //         //可能原因
+                //         foreach(explode(',',$em['yy_id']) as $k3 =>$t13){
+                //             $yuanyin_arr[] = $t13;
+                //         }
+                //         //排除方法
+                //         $fangfa_arr[] = $em['pc_id'];
+                //     }
+                // }
+                
+                // //故障现象 分数 start
+                // foreach ($partent_fault_id as $k1 =>$t){
+                //     if(!in_array($t,$xianxian_arr)){
+                //         $xianxian_score = 1+$xianxian_score;
+                //         $xianxian_content[] = [
+                //             'cx_id'=>$t,
+                //             'cx_type'=>'少写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t])->value('name'),
+                //         ];
+                //     }
+                // }
+                // foreach ($xianxian_arr as $k2 =>$t2){
+                //     if(!in_array($t2,$partent_fault_id)){
+                //         $xianxian_score = 1+$xianxian_score;
+                //         $xianxian_content[] = [
+                //             'cx_id'=>$t2,
+                //             'cx_type'=>'错写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t2])->value('name'),
+                //         ];
+                //     }
+                // }
+                // //故障现象 end
               
                 
-                //故障部位 start
-                foreach ($fault_arr as $k11 =>$t11){
-                    if(!in_array($t11,$buwei_arr)){
-                        $buwei_score = 1+$buwei_score;
-                        $buwei_content[] = [
-                            'cx_id'=>$t11,
-                            'cx_type'=>'少写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t11])->value('name'),
-                        ];
-                    }
-                }
-                foreach ($buwei_arr as $k12 =>$t12){
-                    if(!empty($t12) && !in_array($t12,$fault_arr)){
-                        //错写
-                        $buwei_score = 1+$buwei_score;
-                        $buwei_content[] = [
-                            'cx_id'=>$t12,
-                            'cx_type'=>'错写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t12])->value('name'),
-                        ];
-                    }
-                }
-                //故障部位 end
+                // //故障部位 start
+                // foreach ($fault_arr as $k11 =>$t11){
+                //     if(!in_array($t11,$buwei_arr)){
+                //         $buwei_score = 1+$buwei_score;
+                //         $buwei_content[] = [
+                //             'cx_id'=>$t11,
+                //             'cx_type'=>'少写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t11])->value('name'),
+                //         ];
+                //     }
+                // }
+                // foreach ($buwei_arr as $k12 =>$t12){
+                //     if(!empty($t12) && !in_array($t12,$fault_arr)){
+                //         //错写
+                //         $buwei_score = 1+$buwei_score;
+                //         $buwei_content[] = [
+                //             'cx_id'=>$t12,
+                //             'cx_type'=>'错写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t12])->value('name'),
+                //         ];
+                //     }
+                // }
+                // //故障部位 end
+                
+                // //排除方法 start
+                // //循环固定的排除方法,匹配作答的排除方法
+                // foreach ($paichu_arr as $k21 =>$t21){
+                //     if(!in_array($t21,$fangfa_arr)){
+                //         $fangfa_score = 1+$fangfa_score;
+                //         $fangfa_content[] = [
+                //             'cx_id'=>$t21,
+                //             'cx_type'=>'少写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t21])->value('name'),
+                //         ];
+                //     }
+                // }
+                // //循环作答的排除方法,,匹配固定的排除方法
+                // foreach ($fangfa_arr as $k22 =>$t22){
+                //     if(!empty($t22) && !in_array($t22,$paichu_arr)){
+                //         $fangfa_score = 1+$fangfa_score;
+                //         $fangfa_content[] = [
+                //             'cx_id'=>$t22,
+                //             'cx_type'=>'错写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t22])->value('name'),
+                //         ];
+                //     }
+                // }
+                // //排除方法 end
+
+                // //可能原因 start
+                // //循环固定的可能原因,匹配作答的可能原因
+                // foreach ($yy_arr as $k31 =>$t31){
+                //     if(!in_array($t31,$yuanyin_arr)){
+                //         // echo $t31."<br/>";
+                //         $yuanyin_socre = 1+$yuanyin_socre;
+                //         $yuanyin_content[] = [
+                //             'cx_id'=>$t31,
+                //             'cx_type'=>'少写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t31])->value('name'),
+                //         ];
+                //     }
+                // }
+                // //循环作答的排除方法,,匹配固定的排除方法
+                // foreach ($yuanyin_arr as $k32 =>$t32){
+                //     if(!empty($t32) && !in_array($t32,$yy_arr)){
+                //         $yuanyin_socre = 1+$yuanyin_socre;
+                //         $yuanyin_content[] = [
+                //             'cx_id'=>$t32,
+                //             'cx_type'=>'错写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t32])->value('name'),
+                //         ];
+                //     }
+                // }
+                // $uniqueArray = array_unique($yuanyin_arr);
+                // $diff = array_diff_assoc($yuanyin_arr, $uniqueArray);
+                // if(!empty($diff)){
+                //     foreach ($diff as $k323 =>$t323){
+                //         $yuanyin_socre = 1+$yuanyin_socre;
+                //         $yuanyin_content[] = [
+                //             'cx_id'=>$t323,
+                //             'cx_type'=>'错写',
+                //             'cx_name'=>Fault::where(['fault_id'=>$t323])->value('name'),
+                //         ];
+                //     }
+                // }
+                // //可能原因 end
                 
-                //排除方法 start
-                //循环固定的排除方法,匹配作答的排除方法
-                foreach ($paichu_arr as $k21 =>$t21){
-                    if(!in_array($t21,$fangfa_arr)){
-                        $fangfa_score = 1+$fangfa_score;
-                        $fangfa_content[] = [
-                            'cx_id'=>$t21,
-                            'cx_type'=>'少写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t21])->value('name'),
-                        ];
-                    }
-                }
-                //循环作答的排除方法,,匹配固定的排除方法
-                foreach ($fangfa_arr as $k22 =>$t22){
-                    if(!empty($t22) && !in_array($t22,$paichu_arr)){
-                        $fangfa_score = 1+$fangfa_score;
-                        $fangfa_content[] = [
-                            'cx_id'=>$t22,
-                            'cx_type'=>'错写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t22])->value('name'),
-                        ];
-                    }
-                }
-                //排除方法 end
-
-                //可能原因 start
-                //循环固定的可能原因,匹配作答的可能原因
-                foreach ($yy_arr as $k31 =>$t31){
-                    if(!in_array($t31,$yuanyin_arr)){
-                        // echo $t31."<br/>";
-                        $yuanyin_socre = 1+$yuanyin_socre;
-                        $yuanyin_content[] = [
-                            'cx_id'=>$t31,
-                            'cx_type'=>'少写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t31])->value('name'),
-                        ];
-                    }
-                }
-                //循环作答的排除方法,,匹配固定的排除方法
-                foreach ($yuanyin_arr as $k32 =>$t32){
-                    if(!empty($t32) && !in_array($t32,$yy_arr)){
-                        $yuanyin_socre = 1+$yuanyin_socre;
-                        $yuanyin_content[] = [
-                            'cx_id'=>$t32,
-                            'cx_type'=>'错写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t32])->value('name'),
-                        ];
-                    }
-                }
-                $uniqueArray = array_unique($yuanyin_arr);
-                $diff = array_diff_assoc($yuanyin_arr, $uniqueArray);
-                if(!empty($diff)){
-                    foreach ($diff as $k323 =>$t323){
-                        $yuanyin_socre = 1+$yuanyin_socre;
-                        $yuanyin_content[] = [
-                            'cx_id'=>$t323,
-                            'cx_type'=>'错写',
-                            'cx_name'=>Fault::where(['fault_id'=>$t323])->value('name'),
-                        ];
-                    }
-                }
-                //可能原因 end
-
                 $weixiu_score = $xianxian_score+$yuanyin_socre+$buwei_score+$fangfa_score;
                 if($weixiu_score>15){
                     $weixiu_score = 15;
@@ -544,7 +678,23 @@ class Practice extends Backend
             $row['fangfa_content_name'] = json_decode($row['fangfa_content'],true);
         }
         $other_report = !empty($row['other_report']) ? json_decode($row['other_report'],true):[];
+        $fault_right_list = Db::name('real_exam_fault')->where(['exam_id'=>$ids,'flag'=>1])->select();
+        //根据故障部位 数组
+        $fault_arr = [$fault_right_list[0]['fault_id'],$fault_right_list[1]['fault_id'],$fault_right_list[2]['fault_id']];
+
+        //查找故障现象 数组
+        $partent_fault_id = Fault::where(['fault_id'=>['in',$fault_arr],'sim_type'=>$rows['sim_type']])->column('parent_fault_id');
+        $arr1= [];
+        foreach ($partent_fault_id as $key => $value) {
+            $arr1[] = [
+                'gzxz_id' => $value,
+                'xianxian_content' => $row['xianxian_content_name'],
+                'other_report' => $other_report
+            ];
+        }
         $this->view->assign('other_report', $other_report);
+        $this->view->assign('partent_fault_id', $arr1);
+
         $this->view->assign('row', $row);
         return $this->view->fetch();
     }

+ 33 - 0
application/admin/controller/teacher/Exams.php

@@ -171,7 +171,23 @@ class Exams extends Backend
         }
 
         $other_report = !empty($row['other_report']) ? json_decode($row['other_report'],true):[];
+
+        $fault_right_list = Db::name('real_exam_fault')->where(['exam_id'=>$ids,'flag'=>1])->select();
+        //根据故障部位 数组
+        $fault_arr = [$fault_right_list[0]['fault_id'],$fault_right_list[1]['fault_id'],$fault_right_list[2]['fault_id']];
+
+        //查找故障现象 数组
+        $partent_fault_id = Fault::where(['fault_id'=>['in',$fault_arr],'sim_type'=>$rows['sim_type']])->column('parent_fault_id');
+        $arr1= [];
+        foreach ($partent_fault_id as $key => $value) {
+            $arr1[] = [
+                'gzxz_id' => $value,
+                'xianxian_content' => $row['xianxian_content_name'],
+                'other_report' => $other_report
+            ];
+        }
         if (false === $this->request->isPost()) {
+            $this->view->assign('partent_fault_id', $arr1);
             $this->view->assign('other_report', $other_report);
             $this->view->assign('row', $row);
             return $this->view->fetch();
@@ -244,7 +260,24 @@ class Exams extends Backend
             $row['fangfa_content_name'] = json_decode($row['fangfa_content'],true);
         }
         $other_report = !empty($row['other_report']) ? json_decode($row['other_report'],true):[];
+        
+        $fault_right_list = Db::name('real_exam_fault')->where(['exam_id'=>$ids,'flag'=>1])->select();
+        //根据故障部位 数组
+        $fault_arr = [$fault_right_list[0]['fault_id'],$fault_right_list[1]['fault_id'],$fault_right_list[2]['fault_id']];
+
+        //查找故障现象 数组
+        $partent_fault_id = Fault::where(['fault_id'=>['in',$fault_arr],'sim_type'=>$rows['sim_type']])->column('parent_fault_id');
+        $arr1= [];
+        foreach ($partent_fault_id as $key => $value) {
+            $arr1[] = [
+                'gzxz_id' => $value,
+                'xianxian_content' => $row['xianxian_content_name'],
+                'other_report' => $other_report
+            ];
+        }
         $this->view->assign('other_report', $other_report);
+        $this->view->assign('partent_fault_id', $arr1);
+        
         $this->view->assign('row', $row);
         return $this->view->fetch();
     }

+ 33 - 10
application/admin/view/student/exam/view.html

@@ -116,27 +116,49 @@
                         <tr>
                             <td>序号</td>
                             <td>故障现象</td>
-                            <td>可能原因</td>
+                            <td style="width:25%">可能原因</td>
                             <td>故障部位</td>
                             <td>排除方法</td>  
+                            <td style="width:25%">扣分原因</td>  
                         </tr>
-                        {if $other_report}
-                        {volist name="other_report" id="vo2"}
+                        {volist name="partent_fault_id" id="vo2"}
                         <tr style="height: 60px">    
                             <td>{++$key}</td>
-                            <td>{$vo2.xx_name|htmlentities}</td>
-                            <td>{$vo2.yy_name|htmlentities}</td>
-                            <td>{$vo2.bw_name|htmlentities}</td>
-                            <td>{$vo2.pc_name|htmlentities}</td>
+                            {if $vo2.other_report}
+                                {volist name="vo2.other_report" id="vo21"}
+                                    {if $vo2.gzxz_id eq $vo21.xx_id}
+                                        <td>{$vo21.xx_name|htmlentities}</td>
+                                        <td>{$vo21.yy_name|htmlentities}</td>
+                                        <td>{$vo21.bw_name|htmlentities}</td>
+                                        <td>{$vo21.pc_name|htmlentities}</td>
+                                    {else}
+                                        <td></td>
+                                        <td></td>
+                                        <td></td>
+                                        <td></td>
+                                    {/if}
+                                {/volist}
+                            {else}
+                                <td></td>
+                                <td></td>
+                                <td></td>
+                                <td></td>
+                            {/if}
+                            <td>
+                            {volist name="vo2.xianxian_content" id="vo22"}
+                                {if $vo2.gzxz_id eq $vo22.gzxz_id}
+                                    <span class="text-danger">{$vo22.cx_type}:{$vo22.cx_name}</span><br/>
+                                {/if}
+                            {/volist}
+                            </td>
                         </tr>
                         {/volist}
-                        {else/}
                         <tr>
-                            <td colspan="5" style="text-align: left;padding-left: 1%"></td>
+                            <td colspan="6" style="text-align:left;padding-left:1%;font-weight:600;">故障现象少写或错写1条扣5分;可能原因少写或错写1条扣1分;故障部位少写或错写1条扣1分;排除方法少写或错写1条扣1分。</td>
                         </tr>
-                        {/if}
                     </table>
                     <table class="new_table">
+                    {if false}
                     <tr>
                         <td style="width:5%">序号</td>
                         <td style="width:25%">评分标准</td>
@@ -196,6 +218,7 @@
                             {/if}
                         </td>
                     </tr>
+                    {/if}
                     <tr>
                         <td colspan="5" style="text-align: left;padding-left: 1%">三.维修时间(10分)</td>
                     </tr>

+ 43 - 20
application/admin/view/student/exercise/analysis.html

@@ -104,29 +104,51 @@
                         </table>
                         <table class="new_table1">
                             <tr>
-                                <td>序号</td>
-                                <td>故障现象</td>
-                                <td>可能原因</td>
-                                <td>故障部位</td>
-                                <td>排除方法</td>  
-                            </tr>
-                            {if $other_report}
-                            {volist name="other_report" id="vo2"}
-                            <tr style="height: 60px">    
-                                <td>{++$key}</td>
-                                <td>{$vo2.xx_name|htmlentities}</td>
-                                <td>{$vo2.yy_name|htmlentities}</td>
-                                <td>{$vo2.bw_name|htmlentities}</td>
-                                <td>{$vo2.pc_name|htmlentities}</td>
-                            </tr>
-                            {/volist}
-                            {else/}
-                            <tr>
-                                <td colspan="5" style="text-align: left;padding-left: 1%"></td>
-                            </tr>
+                            <td>序号</td>
+                            <td>故障现象</td>
+                            <td style="width:25%">可能原因</td>
+                            <td>故障部位</td>
+                            <td>排除方法</td>  
+                            <td style="width:25%">扣分原因</td>  
+                        </tr>
+                        {volist name="partent_fault_id" id="vo2"}
+                        <tr style="height: 60px">    
+                            <td>{++$key}</td>
+                            {if $vo2.other_report}
+                                {volist name="vo2.other_report" id="vo21"}
+                                    {if $vo2.gzxz_id eq $vo21.xx_id}
+                                        <td>{$vo21.xx_name|htmlentities}</td>
+                                        <td>{$vo21.yy_name|htmlentities}</td>
+                                        <td>{$vo21.bw_name|htmlentities}</td>
+                                        <td>{$vo21.pc_name|htmlentities}</td>
+                                    {else}
+                                        <td></td>
+                                        <td></td>
+                                        <td></td>
+                                        <td></td>
+                                    {/if}
+                                {/volist}
+                            {else}
+                                <td></td>
+                                <td></td>
+                                <td></td>
+                                <td></td>
                             {/if}
+                            <td>
+                            {volist name="vo2.xianxian_content" id="vo22"}
+                                {if $vo2.gzxz_id eq $vo22.gzxz_id}
+                                    <span class="text-danger">{$vo22.cx_type}:{$vo22.cx_name}</span><br/>
+                                {/if}
+                            {/volist}
+                            </td>
+                        </tr>
+                        {/volist}
+                        <tr>
+                            <td colspan="6" style="text-align:left;padding-left:1%;font-weight:600;">故障现象少写或错写1条扣5分;可能原因少写或错写1条扣1分;故障部位少写或错写1条扣1分;排除方法少写或错写1条扣1分。</td>
+                        </tr>
                         </table>
                         <table class="new_table">
+                        {if false}
                         <tr>
                             <td style="width:5%">序号</td>
                             <td style="width:25%">评分标准</td>
@@ -186,6 +208,7 @@
                                 {/if}
                             </td>
                         </tr>
+                        {/if}
                         <tr>
                             <td colspan="5" style="text-align: left;padding-left: 1%">三.维修时间(10分)</td>
                         </tr>

+ 33 - 10
application/admin/view/student/practice/analysis.html

@@ -109,27 +109,49 @@
                         <tr>
                             <td>序号</td>
                             <td>故障现象</td>
-                            <td>可能原因</td>
+                            <td style="width:25%">可能原因</td>
                             <td>故障部位</td>
                             <td>排除方法</td>  
+                            <td style="width:25%">扣分原因</td>  
                         </tr>
-                        {if $other_report}
-                        {volist name="other_report" id="vo2"}
+                        {volist name="partent_fault_id" id="vo2"}
                         <tr style="height: 60px">    
                             <td>{++$key}</td>
-                            <td>{$vo2.xx_name|htmlentities}</td>
-                            <td>{$vo2.yy_name|htmlentities}</td>
-                            <td>{$vo2.bw_name|htmlentities}</td>
-                            <td>{$vo2.pc_name|htmlentities}</td>
+                            {if $vo2.other_report}
+                                {volist name="vo2.other_report" id="vo21"}
+                                    {if $vo2.gzxz_id eq $vo21.xx_id}
+                                        <td>{$vo21.xx_name|htmlentities}</td>
+                                        <td>{$vo21.yy_name|htmlentities}</td>
+                                        <td>{$vo21.bw_name|htmlentities}</td>
+                                        <td>{$vo21.pc_name|htmlentities}</td>
+                                    {else}
+                                        <td></td>
+                                        <td></td>
+                                        <td></td>
+                                        <td></td>
+                                    {/if}
+                                {/volist}
+                            {else}
+                                <td></td>
+                                <td></td>
+                                <td></td>
+                                <td></td>
+                            {/if}
+                            <td>
+                            {volist name="vo2.xianxian_content" id="vo22"}
+                                {if $vo2.gzxz_id eq $vo22.gzxz_id}
+                                    <span class="text-danger">{$vo22.cx_type}:{$vo22.cx_name}</span><br/>
+                                {/if}
+                            {/volist}
+                            </td>
                         </tr>
                         {/volist}
-                        {else/}
                         <tr>
-                            <td colspan="5" style="text-align: left;padding-left: 1%"></td>
+                            <td colspan="6" style="text-align:left;padding-left:1%;font-weight:600;">故障现象少写或错写1条扣5分;可能原因少写或错写1条扣1分;故障部位少写或错写1条扣1分;排除方法少写或错写1条扣1分。</td>
                         </tr>
-                        {/if}
                     </table>
                     <table class="new_table">
+                    {if false}
                     <tr>
                         <td style="width:5%">序号</td>
                         <td style="width:25%">评分标准</td>
@@ -189,6 +211,7 @@
                             {/if}
                         </td>
                     </tr>
+                    {/if}
                     <tr>
                         <td colspan="5" style="text-align: left;padding-left: 1%">三.维修时间(10分)</td>
                     </tr>

+ 63 - 25
application/admin/view/teacher/exams/edit.html

@@ -19,6 +19,21 @@
         width: 100px;
     }
 
+    .new_table1 {
+        border-collapse: collapse;
+        margin: 0 auto;
+        text-align: center;
+        width: 100%;
+        font-size: 12px;
+    }
+
+    .new_table1 td{
+        border: 1px solid #cad9ea;
+        color: #666;
+        height: 3.5em;
+/*        padding-left: 1% !important;*/
+    }
+
     .span_show {
         float: left;
         margin-left: 15px;
@@ -88,36 +103,58 @@
                     <tr>
                         <td colspan="3">二.维修报告表(15分)</td>
                     </tr>
+                    </tbody>
+                </table>
+
+                <table class="new_table1">
                     <tr>
-                        <td colspan="3">
-                            <table class="new_table">
-                                <tr>
-                                    <td colspan="4">学员答作答情况</td>
-                                </tr>
-                                <tr>
-                                    <td>故障现象</td>
-                                    <td>可能原因</td>
-                                    <td>故障部位</td>
-                                    <td>排除方法</td>
-                                </tr>
-                                {if $other_report}
-                                {volist name="other_report" id="vo2"}
-                                <tr style="height: 30px">    
-                                    <td>{$vo2.xx_name|htmlentities}</td>
-                                    <td>{$vo2.yy_name|htmlentities}</td>
-                                    <td>{$vo2.bw_name|htmlentities}</td>
-                                    <td>{$vo2.pc_name|htmlentities}</td>
-                                </tr>
-                                {/volist}
-                                {else/}
-                                <tr>
-                                    <td colspan="4" style="text-align: left;padding-left: 1%"></td>
-                                </tr>
+                        <td>序号</td>
+                        <td>故障现象</td>
+                        <td style="width:25%">可能原因</td>
+                        <td>故障部位</td>
+                        <td>排除方法</td>  
+                        <td style="width:25%">扣分原因</td>  
+                    </tr>
+                    {volist name="partent_fault_id" id="vo2"}
+                    <tr style="height: 60px">    
+                        <td>{++$key}</td>
+                        {if $vo2.other_report}
+                            {volist name="vo2.other_report" id="vo21"}
+                                {if $vo2.gzxz_id eq $vo21.xx_id}
+                                    <td>{$vo21.xx_name|htmlentities}</td>
+                                    <td>{$vo21.yy_name|htmlentities}</td>
+                                    <td>{$vo21.bw_name|htmlentities}</td>
+                                    <td>{$vo21.pc_name|htmlentities}</td>
+                                {else}
+                                    <td></td>
+                                    <td></td>
+                                    <td></td>
+                                    <td></td>
                                 {/if}
-                            </table>
+                            {/volist}
+                        {else}
+                            <td></td>
+                            <td></td>
+                            <td></td>
+                            <td></td>
+                        {/if}
+                        <td>
+                        {volist name="vo2.xianxian_content" id="vo22"}
+                            {if $vo2.gzxz_id eq $vo22.gzxz_id}
+                                <span class="text-danger">{$vo22.cx_type}:{$vo22.cx_name}</span><br/>
+                            {/if}
+                        {/volist}
                         </td>
                     </tr>
+                    {/volist}
+                    <tr>
+                        <td colspan="6" style="text-align:left;padding-left:1%;font-weight:600;">故障现象少写或错写1条扣5分;可能原因少写或错写1条扣1分;故障部位少写或错写1条扣1分;排除方法少写或错写1条扣1分。</td>
+                    </tr>
+                </table>
 
+                <table class="new_table"> 
+                    <tbody class="task_list">
+                    {if false}
                     <tr>
                         <td>故障现象少写或错写1条扣1分</td>
                         <td><input type="text" name="row[xianxian_score]" value="{$row.xianxian_score|htmlentities}"></td>
@@ -162,6 +199,7 @@
                             {/if}
                         </td>
                     </tr>
+                    {/if}
                     <tr>
                         <td colspan="3">三.维修时间(10分)</td>
                     </tr>

+ 34 - 10
application/admin/view/teacher/exams/view.html

@@ -116,27 +116,50 @@
                         <tr>
                             <td>序号</td>
                             <td>故障现象</td>
-                            <td>可能原因</td>
+                            <td style="width:25%">可能原因</td>
                             <td>故障部位</td>
                             <td>排除方法</td>  
+                            <td style="width:25%">扣分原因</td>  
                         </tr>
-                        {if $other_report}
-                        {volist name="other_report" id="vo2"}
+                        {volist name="partent_fault_id" id="vo2"}
                         <tr style="height: 60px">    
                             <td>{++$key}</td>
-                            <td>{$vo2.xx_name|htmlentities}</td>
-                            <td>{$vo2.yy_name|htmlentities}</td>
-                            <td>{$vo2.bw_name|htmlentities}</td>
-                            <td>{$vo2.pc_name|htmlentities}</td>
+                            {if $vo2.other_report}
+                                {volist name="vo2.other_report" id="vo21"}
+                                    {if $vo2.gzxz_id eq $vo21.xx_id}
+                                        <td>{$vo21.xx_name|htmlentities}</td>
+                                        <td>{$vo21.yy_name|htmlentities}</td>
+                                        <td>{$vo21.bw_name|htmlentities}</td>
+                                        <td>{$vo21.pc_name|htmlentities}</td>
+                                    {else}
+                                        <td></td>
+                                        <td></td>
+                                        <td></td>
+                                        <td></td>
+                                    {/if}
+                                {/volist}
+                            {else}
+                                <td></td>
+                                <td></td>
+                                <td></td>
+                                <td></td>
+                            {/if}
+                            <td>
+                            {volist name="vo2.xianxian_content" id="vo22"}
+                                {if $vo2.gzxz_id eq $vo22.gzxz_id}
+                                    <span class="text-danger">{$vo22.cx_type}:{$vo22.cx_name}</span><br/>
+                                {/if}
+                            {/volist}
+                            </td>
                         </tr>
                         {/volist}
-                        {else/}
                         <tr>
-                            <td colspan="5" style="text-align: left;padding-left: 1%"></td>
+                            <td colspan="6" style="text-align:left;padding-left:1%;font-weight:600;">故障现象少写或错写1条扣5分;可能原因少写或错写1条扣1分;故障部位少写或错写1条扣1分;排除方法少写或错写1条扣1分。</td>
                         </tr>
-                        {/if}
                     </table>
+
                     <table class="new_table"> 
+                    {if false}
                     <tr>
                         <td style="width:5%">序号</td>
                         <td style="width:25%">评分标准</td>
@@ -196,6 +219,7 @@
                             {/if}
                         </td>
                     </tr>
+                    {/if}
                     <tr>
                         <td colspan="5" style="text-align: left;padding-left: 1%">三.维修时间(10分)</td>
                     </tr>