|
|
@@ -208,7 +208,7 @@ class TrainingLogic extends BaseLogic
|
|
|
* @return
|
|
|
*/
|
|
|
public static function submitExam($params){
|
|
|
- //Db::startTrans();
|
|
|
+ Db::startTrans();
|
|
|
try {
|
|
|
|
|
|
// 课程试卷详情
|
|
|
@@ -246,22 +246,56 @@ class TrainingLogic extends BaseLogic
|
|
|
['id' => $params['worker_course_id']]
|
|
|
);
|
|
|
|
|
|
- // 该工程师的课程全部完成,更新任务状态
|
|
|
- $workerCourseCount = TrainingWorkerCourse::where('master_worker_id',$exam_paper_details['master_worker_id'])
|
|
|
- ->where('training_task_id',$exam_paper_details['training_task_id'])
|
|
|
- ->where('study_status','<',5)
|
|
|
- ->count();
|
|
|
- if($workerCourseCount == 0){
|
|
|
- TrainingWorkerTask::where('master_worker_id',$exam_paper_details['master_worker_id'])
|
|
|
+ // 判断是否为服务类目考试
|
|
|
+ if($exam_paper_details['subclass'] > 0){
|
|
|
+ if($study_status === 5){
|
|
|
+ TrainingCategory::where('master_worker_id',$exam_paper_details['master_worker_id'])
|
|
|
+ ->where('training_task_id',$exam_paper_details['training_task_id'])
|
|
|
+ ->where('category_id',$exam_paper_details['subclass'])
|
|
|
+ ->update(['is_must' => 1]);
|
|
|
+
|
|
|
+ $masterWorker = MasterWorker::where('id',$exam_paper_details['master_worker_id'])->findOrEmpty();
|
|
|
+ $category_ids = explode(',',$masterWorker->category_ids);
|
|
|
+ $category_ids[] = $exam_paper_details['subclass'];
|
|
|
+ $category_ids = array_unique($category_ids);
|
|
|
+ // 更新工程师服务类目
|
|
|
+ MasterWorker::update(['category_ids' => implode(',',$category_ids)],['id'=>$exam_paper_details['master_worker_id']]);
|
|
|
+ }else{
|
|
|
+ // 考试不合格则删除考试任务和考试记录,下次重新选题考试
|
|
|
+ $is_random_course = false; // 配置随机课程
|
|
|
+ if($is_random_course){
|
|
|
+ TrainingTask::where('master_worker_id',$exam_paper_details['master_worker_id'])
|
|
|
+ ->where('subclass',$exam_paper_details['subclass'])->delete();
|
|
|
+ }
|
|
|
+ TrainingCategory::where('master_worker_id',$exam_paper_details['master_worker_id'])
|
|
|
+ ->where('training_task_id',$exam_paper_details['training_task_id'])
|
|
|
+ ->where('category_id',$exam_paper_details['subclass'])
|
|
|
+ ->update(['training_task_id' => 0,'is_must' => 0]);
|
|
|
+ TrainingWorkerCourse::where('master_worker_id',$exam_paper_details['master_worker_id'])
|
|
|
+ ->where('subclass',$exam_paper_details['subclass'])
|
|
|
+ ->delete();
|
|
|
+ TrainingWorkerQuestion::where('master_worker_id',$exam_paper_details['master_worker_id'])
|
|
|
+ ->where('subclass',$exam_paper_details['subclass'])
|
|
|
+ ->delete();
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ // 该工程师的课程全部完成,更新任务状态
|
|
|
+ $workerCourseCount = TrainingWorkerCourse::where('master_worker_id',$exam_paper_details['master_worker_id'])
|
|
|
->where('training_task_id',$exam_paper_details['training_task_id'])
|
|
|
- ->where('training_status',1)
|
|
|
- ->update(['training_status'=>2]);
|
|
|
+ ->where('study_status','<',5)
|
|
|
+ ->count();
|
|
|
+ if($workerCourseCount == 0){
|
|
|
+ TrainingWorkerTask::where('master_worker_id',$exam_paper_details['master_worker_id'])
|
|
|
+ ->where('training_task_id',$exam_paper_details['training_task_id'])
|
|
|
+ ->where('training_status',1)
|
|
|
+ ->update(['training_status'=>2]);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- //Db::commit();
|
|
|
+ Db::commit();
|
|
|
return true;
|
|
|
}catch(\Exception $e){
|
|
|
- //Db::rollback();
|
|
|
+ Db::rollback();
|
|
|
self::setError($e->getMessage());
|
|
|
return false;
|
|
|
}
|
|
|
@@ -275,9 +309,10 @@ class TrainingLogic extends BaseLogic
|
|
|
// 课程详情
|
|
|
$course = TrainingCourse::where('id',$workerCourse['training_course_id'])->findOrEmpty()->toArray();
|
|
|
|
|
|
- // 若$workerCourse['course_question_setting']存在 则 替换最新试题配置
|
|
|
-
|
|
|
-
|
|
|
+ // 若$workerCourse['course_question_setting']存在说明随机题 则 替换最新试题配置
|
|
|
+ if($workerCourse['course_question_setting']){
|
|
|
+ $course['course_question_setting'] = json_decode($workerCourse['course_question_setting'],true);
|
|
|
+ }
|
|
|
|
|
|
// 该课程所有试题 答案、分数
|
|
|
$question_ids = array_column($course['course_question_setting'],'select_value')??[];
|
|
|
@@ -357,19 +392,27 @@ class TrainingLogic extends BaseLogic
|
|
|
|
|
|
|
|
|
/**
|
|
|
- * 提交分类并获取培训课程
|
|
|
+ * 提交分类
|
|
|
* @param array
|
|
|
* @return bool
|
|
|
*/
|
|
|
public static function submitCategory($params){
|
|
|
|
|
|
try {
|
|
|
- $trainingCategory = TrainingCategory::where('master_worker_id',$params['user_id'])->where('category_id',$params['category_id'])->findOrEmpty();
|
|
|
- if($trainingCategory->isEmpty()){
|
|
|
- TrainingCategory::create([
|
|
|
- 'master_worker_id' => $params['user_id'],
|
|
|
- 'category_id' => $params['category_id']
|
|
|
- ]);
|
|
|
+ if(!isset($params['category_ids']) || empty($params['category_ids'])){
|
|
|
+ throw new \Exception('分类不能为空');
|
|
|
+ }
|
|
|
+ $category_ids = explode(',',$params['category_ids']);
|
|
|
+ foreach ($category_ids as $category_id) {
|
|
|
+ // 检查该分类下是否存在该分类的培训任务以及课程?
|
|
|
+
|
|
|
+ $trainingCategory = TrainingCategory::where('master_worker_id',$params['user_id'])->where('category_id',$category_id)->findOrEmpty();
|
|
|
+ if($trainingCategory->isEmpty()){
|
|
|
+ TrainingCategory::create([
|
|
|
+ 'master_worker_id' => $params['user_id'],
|
|
|
+ 'category_id' => $params['category_id']
|
|
|
+ ]);
|
|
|
+ }
|
|
|
}
|
|
|
return true;
|
|
|
}catch(\Exception $e){
|
|
|
@@ -394,36 +437,72 @@ class TrainingLogic extends BaseLogic
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 获取某类目所有课程
|
|
|
+ * 获取某类目所有课程任务ID
|
|
|
* @param array
|
|
|
- * @return array
|
|
|
+ * @return int
|
|
|
*/
|
|
|
public static function getCategoryCourse($params){
|
|
|
try {
|
|
|
$trainingCategory = TrainingCategory::where('id',$params['id'])->findOrEmpty();
|
|
|
|
|
|
-/*
|
|
|
- // 为每个类目建立一个培训任务
|
|
|
- $trainingTask = TrainingTask::create([
|
|
|
- 'subclass' => $params['category_id'],
|
|
|
- 'task_name' => '分类ID-'.$params['category_id'],
|
|
|
- 'training_course_id' => array_map('intval', $training_course_id)
|
|
|
- ]);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+ // 获取该类目 $trainingCategory->category_id 下随机课程|固定任务(固定课程) (随机数由配置决定)
|
|
|
+ /*看配置 随机课程 0 固定任务 1 ( 那么就是每个分类对应一个任务即课程组)
|
|
|
+ 随机---先补充需要添加任务 - 返回任务ID
|
|
|
+ 固定---不需要添加任务 - 直接返回任务ID*/
|
|
|
+ if($trainingCategory->training_task_id){ //存在
|
|
|
+ $trainingTask = TrainingTask::where('id',$trainingCategory->training_task_id)->findOrEmpty();
|
|
|
+ }else{ //不存在
|
|
|
+ // 获取该类目下任务ID
|
|
|
+ $trainingTask = TrainingTask::where('subclass',$params['category_id'])->findOrEmpty();
|
|
|
+ if($trainingTask->isEmpty()){
|
|
|
+ // 获取该类目 随机课程
|
|
|
+ $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'],
|
|
|
+ ]);
|
|
|
+ }
|
|
|
|
|
|
+ /*$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('该类目下不存在培训任务,请联系客服配置');
|
|
|
+ }
|
|
|
+ }*/
|
|
|
+
|
|
|
+ $trainingCategory->training_task_id = $trainingTask->id;
|
|
|
+ $trainingCategory->save();
|
|
|
+ }
|
|
|
|
|
|
- $free_course = TrainingWorkerCourse::where('master_worker_id',$params['user_id'])
|
|
|
- ->where('training_task_id',0)
|
|
|
- ->where('subclass',$trainingCategory->category_id)
|
|
|
- ->where('training_course_id',$free_course_id)->findOrEmpty();
|
|
|
- if($free_course->isEmpty()){
|
|
|
- $free_course = TrainingWorkerCourse::create([
|
|
|
+ // 保证用户进来后该分类都是新课程记录 新试题记录 即原来的记录被删除
|
|
|
+ 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' => 0,
|
|
|
+ 'training_task_id' => $trainingTask->id,
|
|
|
+ 'training_course_id' => $course_id,
|
|
|
'subclass' => $params['category_id'],
|
|
|
- 'training_course_id' => $free_course_id,
|
|
|
'play_time' => 0,
|
|
|
'exam_start_time' => 0,
|
|
|
'exam_end_time' => 0,
|
|
|
@@ -431,26 +510,49 @@ class TrainingLogic extends BaseLogic
|
|
|
'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();
|
|
|
+ //每题多少分(按总分100分计算)
|
|
|
+ $score = 100 / count($trainingQuestions);
|
|
|
+ $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
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ $workerCourse->course_question_setting = json_encode($course_question);
|
|
|
+ $workerCourse->save();
|
|
|
+ }else{
|
|
|
+ $course_question = json_decode($trainingCourse->course_question_setting,true);
|
|
|
+ }
|
|
|
+
|
|
|
// 添加该工程师该课程的所有试题初始化记录
|
|
|
- //[{"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 = json_decode(TrainingCourse::where('id',$free_course_id)->value('course_question_setting'),true);
|
|
|
$course_question_ids = array_column($course_question,'select_value');
|
|
|
foreach ($course_question_ids as $question_id) {
|
|
|
$workerQuestion = TrainingWorkerQuestion::create([
|
|
|
- 'worker_course_id' => $free_course->id,
|
|
|
+ '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());
|
|
|
- return [];
|
|
|
+ return false;
|
|
|
}
|
|
|
}
|
|
|
|