|
|
@@ -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;
|
|
|
}
|
|
|
|
|
|
|