liugc 1 год назад
Родитель
Сommit
cb291fda74

+ 31 - 4
app/workerapi/controller/TrainingController.php

@@ -19,7 +19,7 @@ use app\workerapi\validate\MasterWokerValidate;
 
 class TrainingController extends BaseApiController
 {
-    public array $notNeedLogin = [''];
+    public array $notNeedLogin = ['examStatistics'];
 
     /**
      * 获取培训信息
@@ -32,7 +32,7 @@ class TrainingController extends BaseApiController
     }
 
     /**
-     * 获取培训任务里课程列表
+     * 获取工程师的课程列表
      * @return \think\response\Json
      */
     public function getCourseList()
@@ -48,7 +48,7 @@ class TrainingController extends BaseApiController
     public function upWorkerVideoCourse()
     {
         $params  = request()->post();
-        $result = TrainingLogic::upWorkerCourse($params,$this->userId);
+        $result = TrainingLogic::upWorkerCourse($params);
         if($result === false){
             return $this->fail(TrainingLogic::getError());
         }
@@ -63,10 +63,37 @@ class TrainingController extends BaseApiController
     public function getQuestionList()
     {
         $params  = request()->get();
-        $result = TrainingLogic::getQuestionList($params,$this->userId);
+        $result = TrainingLogic::getQuestionList($params);
         return $this->data($result);
     }
 
 
+    /**
+     * 提交考试(即结束考试)
+     * @return \think\response\Json
+     */
+    public function submitExam()
+    {
+        $params  = request()->post();
+        $result = TrainingLogic::submitExam($params);
+        if($result === false){
+            return $this->fail(TrainingLogic::getError());
+        }
+        return $this->success('', [], 1, 1);
+    }
+
+
+
+    /**
+     * 考试结果统计
+     * @return \think\response\Json
+     */
+    public function examStatistics()
+    {
+        $params  = request()->get();
+        $result = TrainingLogic::examStatistics($params);
+        return $this->data($result);
+    }
+
 
 }

+ 82 - 21
app/workerapi/logic/TrainingLogic.php

@@ -13,6 +13,7 @@ use app\common\model\master_worker\MasterWorkerTeam;
 use app\common\model\shops\ShopOrderGoods;
 use app\common\model\shops\ShopOrders;
 use app\common\model\training\TrainingCourse;
+use app\common\model\training\TrainingQuestions;
 use app\common\model\training\TrainingWorkerCourse;
 use app\common\model\training\TrainingWorkerQuestion;
 use app\common\model\training\TrainingWorkerTask;
@@ -23,6 +24,7 @@ use app\workerapi\lists\ServiceWorkLists;
 use think\Exception;
 use think\facade\Config;
 use think\facade\Db;
+use think\facade\Log;
 
 
 class TrainingLogic extends  BaseLogic
@@ -52,8 +54,11 @@ class TrainingLogic extends  BaseLogic
     }
 
 
-    /*
-     * 获取课程列表
+    /**
+     * 获取工程师的课程列表
+     * @param int $masterWorkerId
+     * @param array $params
+     * @return array id => 工程师的课程id
      */
     public static function getCourseList(int $masterWorkerId,$params = [])
     {
@@ -78,7 +83,7 @@ class TrainingLogic extends  BaseLogic
      * @param int $masterWorkerId
      * @return bool
      */
-    public static function upWorkerCourse(array $params,int $masterWorkerId)
+    public static function upWorkerCourse(array $params)
     {
         try {
             $logCourse = TrainingWorkerCourse::where('id',$params['id'])->findOrEmpty();
@@ -119,14 +124,15 @@ class TrainingLogic extends  BaseLogic
     }
 
     /**
-     * 获取考试列表(即开始考试)
-     * @return array
+     * 获取工程师的考试试题列表(即开始考试)
+     * @param array $params  worker_course_id 工程师的课程id
+     * @return array      id 工程师的试题id
      */
-    public static function getQuestionList(array $params,int $masterWorkerId)
+    public static function getQuestionList(array $params)
     {
         try {
             // 开始考试
-            self::upWorkerCourse(['id'=>$params['worker_course_id'],'status'=> 4], $masterWorkerId);
+            self::upWorkerCourse(['id'=>$params['worker_course_id'],'status'=> 4]);
 
             $list = TrainingWorkerQuestion::with(['trainingQuestions'])->where('worker_course_id',$params['worker_course_id'])->select()->toArray();
             foreach ($list as &$item) {
@@ -145,22 +151,48 @@ class TrainingLogic extends  BaseLogic
 
 
     /**
-     * 提交考试
-     * @param int $teamId
+     * 提交考试  该工程师的课程id + 所有的工程师的试题id、答案
+     * @param array
      * @param int $masterWorkerId
-     * @return array
+     * @return
      */
-    public static function submitExam($params,$masterWorkerId){
+    public static function submitExam($params){
         Db::startTrans();
         try {
-            // 结束考试
-            self::upWorkerCourse(['id'=>$params['worker_course_id'],'status'=> 5], $masterWorkerId);
-            /*id
-                    question_answer VARCHAR ( 255 ) NOT NULL COMMENT '试题答案',
-	        worker_answer VARCHAR ( 255 ) NOT NULL COMMENT '师傅填写答案', -- 小写 - 排序 - 对比答案 不为空则已作答
-	        exam_score FLOAT ( 10, 2 ) DEFAULT ' 0' NOT NULL COMMENT '实际得分',*/
 
-             // 对比答案小写排序
+            // 课程试卷详情
+            $exam_paper_details = self::getExamPaperDetails(['worker_course_id'=>$params['worker_course_id']]);
+
+            // 提交的答案 [['id'=> ,'answer'=>],['id'=> ,'answer'=>]]
+            !is_array($params['worker_answer']) && $params['worker_answer'] = json_decode($params['worker_answer'],true);
+            $worker_answer = array_column($params['worker_answer'],'answer','id');
+
+            //对比答案 更新答题记录实际每题得分,总得分
+            $all_exam_score = 0;
+            $course_question_setting = $exam_paper_details['course']['course_question_setting'];
+            foreach ($course_question_setting as &$item) {
+                $exam_score = 0;
+                ($worker_answer_value = explode(',',$worker_answer[$item['select_value']])) && sort($worker_answer_value) && ($worker_answer_value = implode(',',$worker_answer_value));
+                if($worker_answer_value == $item['question_answer']){
+                    $exam_score = $item['score'];
+                }
+                $all_exam_score += $exam_score;
+                TrainingWorkerQuestion::update(
+                    ['worker_answer' => $worker_answer_value,'exam_score' => $exam_score],
+                    ['worker_course_id' => $params['worker_course_id'],'questions_id' => $item['select_value']]
+                );
+            }
+
+            // 更新课程得分、状态
+            if((float)$all_exam_score < (float)$exam_paper_details['course']['course_question_score']){
+                $study_status = 4;
+            }else{
+                $study_status = 5;
+            }
+            TrainingWorkerCourse::update(
+                ['exam_score' => $all_exam_score,'study_status'=>$study_status,'exam_start_time'=>time()],
+                ['id' => $params['worker_course_id']]
+            );
 
             Db::commit();
             return true;
@@ -171,15 +203,44 @@ class TrainingLogic extends  BaseLogic
         }
     }
 
+    public static function getExamPaperDetails($params){
+        // 试卷详情
+        $workerCourse = [];
+        if(isset($params['worker_course_id'])){
+            $workerCourse = TrainingWorkerCourse::where('id',$params['worker_course_id'])->findOrEmpty()->toArray();
+            // 课程详情
+            $course = TrainingCourse::where('id',$workerCourse['training_course_id'])->findOrEmpty()->toArray();
+            // 该课程所有试题 答案、分数
+            $question_ids = array_column($course['course_question_setting'],'select_value');
+            $question_column = TrainingQuestions::where('id',$question_ids)->column('question_answer','id');
+            foreach ($course['course_question_setting'] as &$item) {
+                $item['question_answer'] = $question_column[$item['select_value']];
+            }
+            $workerCourse['course'] = $course;
+        }
+        Log::info('exam_paper_details:'.json_encode($workerCourse));
+        return $workerCourse;
+    }
+
+
+
     /**
      * 考试结果统计
      * @param int $teamId
      * @param int $masterWorkerId
      * @return array
      */
-    public static function examStatistics($params,$masterWorkerId){
-        // 计算考试结果: 总题数 正确率 总用时 总得分(每题得分累计) 是否合格
-        return [];
+    public static function examStatistics($params){
+        // 计算考试结果: 总题数 正确率(>0的题数) 总得分(每题得分累计) | 总用时   是否合格
+        // training_worker_question  training_worker_course
+        $res = [];
+        $res['statistics'] = TrainingWorkerQuestion::where('worker_course_id',$params['worker_course_id'])
+            ->field(['worker_course_id',Db::raw('COUNT(id) AS total_questions,SUM(CASE WHEN exam_score > 0 THEN 1 ELSE 0 END) AS correct_questions,ROUND((SUM(CASE WHEN exam_score > 0 THEN 1 ELSE 0 END) / COUNT(id)) * 100, 2) AS correct_rate_percentage,SUM(exam_score) AS total_score')])
+            ->group('worker_course_id')
+            ->select();
+        $res['course'] = TrainingWorkerCourse::where('id',$params['worker_course_id'])->findOrEmpty()->toArray();
+        $res['statistics_list'] = TrainingWorkerQuestion::where('worker_course_id',$params['worker_course_id'])->select();
+        return $res;
     }
 
 

+ 13 - 5
app/workerapi/logic/TrainingWorkerTaskLogic.php

@@ -28,17 +28,25 @@ class TrainingWorkerTaskLogic extends BaseLogic
      */
     public static function upTaskOrder($masterWorkerId): bool
     {
-        $task = TrainingWorkerTask::where('master_worker_id',$masterWorkerId)->findOrEmpty();
-        if (!$task->isEmpty() && $task->shop_orders_id == 0) {
+        $taskWorker = TrainingWorkerTask::where('master_worker_id',$masterWorkerId)->findOrEmpty();
+        if (!$taskWorker->isEmpty() && $taskWorker->shop_orders_id == 0) {
             //shop_goods_id  INT ( 10 ) DEFAULT 0  NOT NULL COMMENT '商品id(套餐)',
             //shop_orders_id int(10) NOT NULL DEFAULT '0' COMMENT '购买单号id',
             // 检查是否已经购买套餐
             $sn_orders = ShopOrders::where('worker_id',$masterWorkerId)->where('pay_status',1)->where('refund_status',0)->column('id','sn');
             if (!empty($sn_orders)) {
-                $shopOrderGoods = ShopOrderGoods::whereIn('sn',array_keys($sn_orders))->where('shop_goods_id',$task->shop_goods_id)->findOrEmpty();
+                $shopOrderGoods = ShopOrderGoods::whereIn('sn',array_keys($sn_orders))->where('shop_goods_id',$taskWorker->shop_goods_id)->findOrEmpty();
                 if (!$shopOrderGoods->isEmpty()) {
-                    $task->shop_orders_id = $sn_orders[$shopOrderGoods->sn];
-                    $task->save();
+                    $taskWorker->shop_orders_id = $sn_orders[$shopOrderGoods->sn];
+                    $taskWorker->save();
+
+                    // 添加培训课程
+                    $course = TrainingCourse::where('id',$taskWorker->course_id)->findOrEmpty();
+
+
+
+
+
                     return true;
                 }
             }