Sfoglia il codice sorgente

Merge branch 'youhua-m' into transfer-master

liugc 1 anno fa
parent
commit
fce82d34e1

+ 112 - 7
app/adminapi/logic/training/TrainingWorkerTaskLogic.php

@@ -16,6 +16,7 @@ namespace app\adminapi\logic\training;
 
 
 use app\common\model\training\TrainingCourse;
+use app\common\model\training\TrainingQuestions;
 use app\common\model\training\TrainingTask;
 use app\common\model\training\TrainingWorkerCourse;
 use app\common\model\training\TrainingWorkerQuestion;
@@ -45,6 +46,18 @@ class TrainingWorkerTaskLogic extends BaseLogic
 
         Db::startTrans();
         try {
+
+            // training_task_id 课程组id,配置为 0 或 1,2,3
+            if($params['training_task_id']){
+                $trainingTask = TrainingTask::create([
+                    'task_name' => '工程师个人-'.$params['master_worker_id'],
+                    'training_course_id' => array_map('intval', explode(',',$params['training_task_id'])),
+                    'subclass' => 0,
+                    'master_worker_id' => $params['master_worker_id'],
+                ]);
+                $params['training_task_id'] = $trainingTask->id;
+            }
+
             TrainingWorkerTask::create([
                 'master_worker_id' => $params['master_worker_id'],
                 'shop_goods_id' => $params['shop_goods_id']??0,
@@ -54,9 +67,6 @@ class TrainingWorkerTaskLogic extends BaseLogic
                 'task_list' => $params['task_list']??'',
             ]);
 
-            // 添加该工程师初始化记录
-            self::trainingCourseRecord($params['master_worker_id'],$params['training_task_id']);
-
             Db::commit();
             return true;
         } catch (\Exception $e) {
@@ -80,8 +90,8 @@ class TrainingWorkerTaskLogic extends BaseLogic
         try {
             TrainingWorkerTask::where('id', $params['id'])->update([
                 'master_worker_id' => $params['master_worker_id'],
-                'shop_goods_id' => $params['shop_goods_id']??0,
-                'training_task_id' => $params['training_task_id']??0,
+                //'shop_goods_id' => $params['shop_goods_id']??0,
+                //'training_task_id' => $params['training_task_id']??0,
                 'lead_master_worker_id' => $params['lead_master_worker_id']??0,
                 'operate_status' => $params['operate_status']??0,
                 'task_list' => $params['task_list']?json_encode($params['task_list']):'',
@@ -122,10 +132,11 @@ class TrainingWorkerTaskLogic extends BaseLogic
         return TrainingWorkerTask::findOrEmpty($params['id'])->toArray();
     }
 
-    /** 培训课程初始化记录
+    /** 培训课程试题记录初始化
      */
     public static function trainingCourseRecord($masterWorkerId,$training_task_id): array
     {
+        /*
         $ids = TrainingWorkerCourse::where('master_worker_id',$masterWorkerId)->where('training_task_id',$training_task_id)->column('id');
         if(count($ids)>0){
             return $ids;
@@ -157,7 +168,101 @@ class TrainingWorkerTaskLogic extends BaseLogic
                 ]);
             }
         }
-        return $training_course_ids??[];
+        $training_course_ids??*/
+        return [];
+    }
+
+    /** 培训课程初始化记录 
+     */
+    public static function trainingCourseRecordInitial($masterWorkerId,$trainingTask): bool
+    {
+        $training_course_ids  = $trainingTask['training_course_id'];
+        // 添加该工程师的所有培训课程初始化记录
+        foreach ($training_course_ids as $course_id) {
+            $trainingCourse = TrainingCourse::where(['id' => $course_id])->findOrEmpty();
+            if($trainingCourse->isEmpty()){
+                continue;
+            }
+            TrainingWorkerCourse::create([
+                'master_worker_id' => $masterWorkerId,
+                'training_task_id' => $trainingTask['id'],
+                'training_course_id' => $course_id,
+                'subclass' => $trainingTask['subclass'],
+                'play_time' => 0,
+                'exam_start_time' => 0,
+                'exam_end_time' => 0,
+                'study_status' => 0,
+                'exam_score' => 0,
+            ]);
+        }
+        return true;
+    }
+
+    /** 培训试题初始化记录 
+     */
+    public static function trainingQuestionRecordInitial($workerCourse): bool
+    {
+
+        $trainingCourse = TrainingCourse::where('id',$workerCourse['training_course_id'])->findOrEmpty();
+        // 配置是否随机出题? 0 1
+        if($trainingCourse->randomly_question){
+            // 将之前题全删除 重新选题
+            TrainingWorkerQuestion::where([
+                'master_worker_id' => $workerCourse['master_worker_id'],
+                'subclass' => $workerCourse['subclass'],
+                'worker_course_id' => $workerCourse['id']
+            ])->delete();
+            $trainingQuestions = TrainingQuestions::where('subclass',$trainingCourse->subclass)->order(Db::raw('rand()'))->limit($trainingCourse->randomly_num)->select()->toArray();
+            if(empty($trainingQuestions)){
+                return false;
+            }
+            
+            //每题多少分(按总分100分计算)
+            $score = bcdiv(100, count($trainingQuestions), 2);
+            $course_question = [];
+            foreach ($trainingQuestions as $block_key => $trainingQuestion) {
+                //[{"block_key":1,"select_value":1,"score":"20"},{"block_key":2,"select_value":2,"score":"10"},{"block_key":3,"select_value":3,"score":"70"}]
+                $course_question[] = [
+                    'block_key' => $block_key+1,
+                    'select_value' => $trainingQuestion['id'],
+                    'score' => $score
+                ];
+            }
+            TrainingWorkerCourse::where('id',$workerCourse['id'])->update(['course_question_setting'=>json_encode($course_question)]);
+        }else{
+            if(empty($workerCourse['course_question_setting'])){
+                return false;
+            }
+            $course_question = json_decode($workerCourse['course_question_setting'],true);
+        }
+
+        // 添加该工程师该课程的所有试题初始化记录
+        $course_question_ids = array_column($course_question,'select_value');
+        foreach ($course_question_ids as $question_id) {
+            $trainingQuestions = TrainingQuestions::where(['id' => $question_id])->findOrEmpty();
+            if($trainingQuestions->isEmpty()){
+                continue;
+            }
+
+            $trainingWorkerQuestion = TrainingWorkerQuestion::where([
+                'master_worker_id' => $workerCourse['master_worker_id'],
+                'subclass' => $workerCourse['subclass'],
+                'worker_course_id' => $workerCourse['id'],
+                'questions_id' => $question_id
+            ])->findOrEmpty();
+            if($trainingWorkerQuestion->isEmpty()){
+                TrainingWorkerQuestion::create([
+                    'master_worker_id' => $workerCourse['master_worker_id'],
+                    'subclass' => $workerCourse['subclass'],
+                    'worker_course_id' => $workerCourse['id'],
+                    'questions_id' => $question_id,
+                    'worker_answer' => '',
+                    'exam_score' => 0
+                ]);
+            }
+        }
+
+        return true;
     }
 
 }

+ 35 - 152
app/workerapi/logic/TrainingLogic.php

@@ -90,9 +90,24 @@ class TrainingLogic extends  BaseLogic
     {
         try {
             if(!isset($params['training_task_id']) || empty($params['training_task_id'])) {
-                throw new \Exception('缺少参数');
+                return [];
             }
-            $list =  TrainingWorkerCourse::with(['trainingCourse'])->where('master_worker_id',$masterWorkerId)->where('training_task_id',$params['training_task_id'])->select()->toArray();
+        
+            $trainingTask = TrainingTask::where('id',$params['training_task_id'])->findOrEmpty()->toArray();
+            if(empty($trainingTask)){
+                return [];
+            }
+            $trainingWorkerCourse = $trainingWorkerCourseList =  TrainingWorkerCourse::with(['trainingCourse'])
+                        ->where('master_worker_id',$masterWorkerId)
+                        ->where('training_task_id',$params['training_task_id'])
+                        ->where('subclass',$trainingTask['subclass']);
+
+            // 为空则初始化课程记录列表
+            if(empty($trainingWorkerCourse->count())){
+                \app\adminapi\logic\training\TrainingWorkerTaskLogic::trainingCourseRecordInitial($masterWorkerId,$trainingTask);
+            }
+            
+            $list = $trainingWorkerCourseList->select()->toArray();
             foreach ($list as &$item) {
                 $item['course_name'] = $item['trainingCourse']['course_name']??'';
                 $item['course_picture'] = FileService::getFileUrl($item['trainingCourse']['course_picture']??'');
@@ -116,9 +131,9 @@ class TrainingLogic extends  BaseLogic
         try {
             if(isset($params['free_course_id']) && $params['free_course_id'] > 0) $params['id'] = self::freeWorkerCourseId($masterWorkerId,$params['free_course_id']);
             $info =  TrainingWorkerCourse::with(['trainingCourse'])->where('master_worker_id',$masterWorkerId)->where('id',$params['id'])->findOrEmpty()->toArray();
-            $info['course_name'] = $info['trainingCourse']['course_name'];
-            $info['course_picture'] = FileService::getFileUrl($info['trainingCourse']['course_picture']);
-            $info['course_url'] = FileService::getFileUrl($info['trainingCourse']['course_url']);
+            $info['course_name'] = $info['trainingCourse']['course_name']??'';
+            $info['course_picture'] = FileService::getFileUrl($info['trainingCourse']['course_picture']??'');
+            $info['course_url'] = FileService::getFileUrl($info['trainingCourse']['course_url']??'');
             return $info;
         } catch (\Exception $e) {
             self::setError($e->getMessage());
@@ -183,7 +198,7 @@ class TrainingLogic extends  BaseLogic
     public static function getQuestionList(array $params)
     {
         try {
-            $workerCourse = TrainingWorkerCourse::where('id',$params['worker_course_id'])->findOrEmpty();
+            $workerCourse = TrainingWorkerCourse::where('id',$params['worker_course_id'])->findOrEmpty()->toArray();
             $study_status = 0;
             if(isset($params['is_resit']) && $params['is_resit'] == 1 && $workerCourse['study_status'] == 4){
                 // 重置
@@ -196,45 +211,8 @@ class TrainingLogic extends  BaseLogic
                 self::upWorkerCourse(['id'=>$params['worker_course_id'],'status'=> 4]);
             }
 
-            $trainingCourse = TrainingCourse::where('id',$workerCourse['training_course_id'])->findOrEmpty();
-            // 配置是否随机出题? 0 1
-            if($trainingCourse->randomly_question){
-                $where = [];
-                if($trainingCourse->subclass){
-                    $where[] = ['subclass','=',$trainingCourse->subclass];
-                }else{
-                    $where[] = ['subclass','=',0];
-                }
-                // 随机出题 随机x个试题 x由该课程配置决定 比如10个试题
-                $trainingQuestions = TrainingQuestions::where($where)->order(Db::raw('rand()'))->limit($trainingCourse->randomly_num)->select()->toArray();
-                //每题多少分(按总分100分计算)
-                $score = bcdiv(100, count($trainingQuestions), 2);
-                $course_question = [];
-                foreach ($trainingQuestions as $block_key => $trainingQuestion) {
-                    //[{"block_key":1,"select_value":1,"score":"20"},{"block_key":2,"select_value":2,"score":"10"},{"block_key":3,"select_value":3,"score":"70"}]
-                    $course_question[] = [
-                        'block_key' => $block_key+1,
-                        'select_value' => $trainingQuestion['id'],
-                        'score' => $score
-                    ];
-                }
-                TrainingWorkerCourse::where('id',$workerCourse['id'])->update(['course_question_setting'=>json_encode($course_question)]);
-
-                TrainingWorkerQuestion::where('worker_course_id',$workerCourse['id'])->delete();
-
-                // 添加该工程师该课程的所有试题初始化记录
-                $course_question_ids = array_column($course_question,'select_value');
-                foreach ($course_question_ids as $question_id) {
-                    TrainingWorkerQuestion::create([
-                        'master_worker_id' => $params['user_id'],
-                        'subclass' => $trainingCourse->subclass,
-                        'worker_course_id' => $workerCourse['id'],
-                        'questions_id' => $question_id,
-                        'worker_answer' => '',
-                        'exam_score' => 0
-                    ]);
-                }
-            }
+            // 检查是否随机课程 即初始化试题
+            \app\adminapi\logic\training\TrainingWorkerTaskLogic::trainingQuestionRecordInitial($workerCourse);
 
             $list = TrainingWorkerQuestion::with(['trainingQuestions'])->where('worker_course_id',$params['worker_course_id'])->select()->toArray();
             foreach ($list as &$item) {
@@ -501,118 +479,23 @@ class TrainingLogic extends  BaseLogic
                 throw new \Exception('该类目不存在');
             }
             $params['category_id'] = $trainingCategory->category_id;
-            // 获取该类目 $trainingCategory->category_id 下随机课程|固定任务(固定课程)  (随机数由配置决定)
-            /*看配置 随机课程 0  固定任务  1 ( 那么就是每个分类对应一个任务即课程组)
-            随机---先补充需要添加任务 - 返回任务ID
-            固定---不需要添加任务 - 直接返回任务ID*/
-            if($trainingCategory->training_task_id){ //存在
+            if($trainingCategory->training_task_id){
                     $trainingTask = TrainingTask::where('id',$trainingCategory->training_task_id)->findOrEmpty();
-            }else{ //不存在
-                // 获取该类目下任务ID
-                $trainingTask = TrainingTask::where('subclass',$params['category_id'])->where('master_worker_id',0)->findOrEmpty();
-                if($trainingTask->isEmpty()){
-                    // 获取该类目 随机课程
-                    //$fixed_course_ids = [1,2,3];
-                    $trainingCourse = TrainingCourse::where('subclass',$trainingTask->subclass)->order(Db::raw('rand()'))->limit(3)->select()->toArray();
-                    if(empty($trainingCourse)){
-                        throw new \Exception('该类目下不存在课程,请联系客服配置');
-                    }
-                    $fixed_course_ids = array_column($trainingCourse,'id');
-                    $trainingTask = TrainingTask::create([
-                        'task_name' => '分类ID-'.$params['category_id'],
-                        'training_course_id' => array_map('intval', $fixed_course_ids),
-                        'subclass' => $params['category_id'],
-                        'master_worker_id' => $params['user_id'],
-                    ]);
+            }else{
+                $trainingCourse = TrainingCourse::where('subclass',$params['category_id'])->order(Db::raw('rand()'))->limit(1)->select()->toArray();
+                if(empty($trainingCourse)){
+                    return 0;
                 }
-
-                /*$is_random_course = false; // 配置随机课程
-                if($is_random_course){
-                    // 获取该类目配置 随机课程或类目下无任务则随机
-                    $fixed_course_ids = [1,2,3];
-                    $trainingTask = TrainingTask::create([
-                        'task_name' => '分类ID-'.$params['category_id'],
-                        'training_course_id' => array_map('intval', $fixed_course_ids),
-                        'subclass' => $params['category_id'],
-                        'master_worker_id' => $params['user_id'],
-                    ]);
-                }else{
-                    // 获取该类目下任务ID
-                    $trainingTask = TrainingTask::where('subclass',$params['category_id'])->findOrEmpty();
-                    if($trainingTask->isEmpty()){
-                        throw new \Exception('该类目下不存在培训任务,请联系客服配置');
-                    }
-                }*/
-
+                $fixed_course_ids = array_column($trainingCourse,'id');
+                $trainingTask = TrainingTask::create([
+                    'task_name' => '分类ID-'.$params['category_id'],
+                    'training_course_id' => array_map('intval', $fixed_course_ids),
+                    'subclass' => $params['category_id'],
+                    'master_worker_id' => $params['user_id'],
+                ]);
                 $trainingCategory->training_task_id = $trainingTask->id;
                 $trainingCategory->save();
-
-                /*// 保证用户进来后该分类都是新课程记录 新试题记录 即原来的记录被删除
-                TrainingWorkerCourse::where('master_worker_id',$params['user_id'])
-                    ->where('subclass',$params['category_id'])
-                    ->delete();
-                TrainingWorkerQuestion::where('master_worker_id',$params['user_id'])
-                    ->where('subclass',$params['category_id'])
-                    ->delete();*/
-
-                $training_course_ids  = json_decode(TrainingTask::where('id',$trainingTask->id)->value('training_course_id')??'[]',true);
-                // 添加该工程师的所有培训课程初始化记录
-                foreach ($training_course_ids as $course_id) {
-                    $workerCourse = TrainingWorkerCourse::create([
-                        'master_worker_id' => $params['user_id'],
-                        'training_task_id' => $trainingTask->id,
-                        'training_course_id' => $course_id,
-                        'subclass' => $params['category_id'],
-                        'play_time' => 0,
-                        'exam_start_time' => 0,
-                        'exam_end_time' => 0,
-                        'study_status' => 0,
-                        'exam_score' => 0,
-                    ]);
-
-                    $trainingCourse = TrainingCourse::where('id',$course_id)->findOrEmpty();
-                    // 配置是否随机出题? 0 1
-                    //$trainingCourse->randomly_question = true;
-                    if($trainingCourse->randomly_question){
-                        // 随机出题 随机x个试题 x由该课程配置决定 比如10个试题
-                        $trainingQuestions = TrainingQuestions::where('subclass',$trainingCourse->subclass)->order(Db::raw('rand()'))->limit($trainingCourse->randomly_num)->select()->toArray();
-                        if(empty($trainingQuestions)){
-                            throw new \Exception('该类目下不存在试题,请联系客服配置');
-                        }
-                        //每题多少分(按总分100分计算)
-                        $score = bcdiv(100, count($trainingQuestions), 2);
-                        $course_question = [];
-                        foreach ($trainingQuestions as $block_key => $trainingQuestion) {
-                            //[{"block_key":1,"select_value":1,"score":"20"},{"block_key":2,"select_value":2,"score":"10"},{"block_key":3,"select_value":3,"score":"70"}]
-                            $course_question[] = [
-                                'block_key' => $block_key+1,
-                                'select_value' => $trainingQuestion['id'],
-                                'score' => $score
-                            ];
-                        }
-                        TrainingWorkerCourse::where('id',$workerCourse->id)->update(['course_question_setting'=>json_encode($course_question)]);
-                    }else{
-                        $course_question = $trainingCourse->course_question_setting;
-                    }
-                    if(empty($course_question)){
-                        throw new \Exception('该类目下不存在试题,请联系客服配置');
-                    }
-                    // 添加该工程师该课程的所有试题初始化记录
-                    $course_question_ids = array_column($course_question,'select_value');
-                    foreach ($course_question_ids as $question_id) {
-                        $workerQuestion = TrainingWorkerQuestion::create([
-                            'master_worker_id' => $params['user_id'],
-                            'subclass' => $params['category_id'],
-                            'worker_course_id' => $workerCourse->id,
-                            'questions_id' => $question_id,
-                            'worker_answer' => '',
-                            'exam_score' => 0
-                        ]);
-                    }
-                }
             }
-
-            //return self::getCourseList($params['user_id'],['training_task_id'=>$trainingTask->id]);
             return $trainingTask->id;
         }catch(\Exception $e){
             self::setError($e->getMessage());

+ 8 - 2
app/workerapi/service/MasterWokerTaskRequiredService.php

@@ -15,12 +15,18 @@ class MasterWokerTaskRequiredService
 
     public static function learningStatus($userId) : bool
     {
-        return (bool)TrainingWorkerTask::where('master_worker_id', $userId)->value('shop_orders_id');
+        if(TrainingWorkerTask::where('master_worker_id', $userId)->value('shop_goods_id'))
+            return (bool)TrainingWorkerTask::where('master_worker_id', $userId)->value('shop_orders_id');
+
+        return true;
     }
 
     public static function trainingTask($userId): bool
     {
-        return TrainingWorkerTask::where('master_worker_id', $userId)->value('training_status')==2;
+        if(TrainingWorkerTask::where('master_worker_id', $userId)->value('training_task_id'))
+            return TrainingWorkerTask::where('master_worker_id', $userId)->value('training_status')==2;
+
+        return true;
     }
 
     public static function operateStatus($userId): bool