Pārlūkot izejas kodu

Merge branch 'feat-quiz' into temp-pre

shc 1 gadu atpakaļ
vecāks
revīzija
d0f1e1fe40

+ 25 - 0
db/13wm_user_plat_quiz_res.sql

@@ -0,0 +1,25 @@
+USE `hnqzx`;
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for wm_user_plat_quiz_res
+-- ----------------------------
+DROP TABLE IF EXISTS `wm_user_plat_quiz_res`;
+CREATE TABLE `wm_user_plat_quiz_res`
+(
+    `res_id`      INT AUTO_INCREMENT COMMENT 'Id',
+    `user_id`     INT      NOT NULL COMMENT '用户ID',
+    `quiz_id`     INT COMMENT '试卷id',
+    `quiz_res`    JSON COMMENT '测试结果',
+    `res_expiry`  DATE     NOT NULL COMMENT '测评有效期',
+    `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+    PRIMARY KEY `pk_id` (`res_id`) USING BTREE,
+    INDEX `idx_uid` (`user_id`) USING BTREE,
+    INDEX `idx_qid` (`quiz_id`) USING BTREE
+) ENGINE = InnoDB
+    COMMENT ='用户测评的评判结果';
+
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 7 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/dto/WmQuizDTO.java

@@ -2,6 +2,7 @@ package com.qunzhixinxi.hnqz.admin.api.dto;
 
 import com.qunzhixinxi.hnqz.admin.api.entity.WmQuestion;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmQuiz;
+import com.qunzhixinxi.hnqz.admin.api.model.WmQuizResultModel;
 import com.qunzhixinxi.hnqz.common.core.constant.enums.UpmsState;
 import com.qunzhixinxi.hnqz.common.core.constant.enums.UpmsType;
 import lombok.AccessLevel;
@@ -166,4 +167,10 @@ public final class WmQuizDTO {
 		private Integer questionId;
 	}
 
+	@Data
+	public static class OnUserPltTestResultCreate {
+		@NotEmpty(message = "测试结果必填")
+		private WmQuizResultModel[] quizResults;
+	}
+
 }

+ 40 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/WmPlatformQuizTestResult.java

@@ -0,0 +1,40 @@
+package com.qunzhixinxi.hnqz.admin.api.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.qunzhixinxi.hnqz.admin.api.model.WmQuizResultModel;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * 用户平台试卷测评结果
+ *
+ * @author jimmy
+ * @version 1.0.0
+ * @date 2023-10-25 15:39
+ */
+@Data
+@TableName(value = "wm_user_plat_quiz_res", autoResultMap = true)
+public final class WmPlatformQuizTestResult {
+
+
+	@TableId(value = "res_id", type = IdType.AUTO)
+	private Integer resultId;
+
+	private Integer userId;
+
+	private Integer quizId;
+
+	@TableField(value = "quiz_res", typeHandler = JacksonTypeHandler.class)
+	private WmQuizResultModel quizResult;
+
+	@TableField(value = "res_expiry")
+	private LocalDate expiry;
+
+	private LocalDateTime createTime;
+}

+ 9 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/vo/WmQuizVO.java

@@ -6,6 +6,8 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 试卷模块vo
@@ -24,4 +26,11 @@ public final class WmQuizVO {
 		private String createBy;
 		private WmQuestion details;
 	}
+
+	@Data
+	public static class ToPltQuizTestVO{
+		private Boolean required;
+		private List<Map<String, Object>> testResults;
+
+	}
 }

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 17 - 725
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java


+ 2 - 8
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmQuizController.java

@@ -119,9 +119,7 @@ public class WmQuizController {
 	@GetMapping(value = "/quiz/avail/list")
 	public R<List<WmQuiz>> listQuizzes() {
 
-		List<WmQuiz> quizzes = quizService.list(Wrappers.<WmQuiz>lambdaQuery().eq(WmQuiz::getEnterpriseId, SecurityUtils.getUser().getDeptId()).eq(WmQuiz::getState, UpmsState.QuizState.RELEASE));
-
-		return R.ok(quizzes);
+		return R.ok(quizService.listEntQuizzes(SecurityUtils.getUser().getDeptId(), UpmsState.QuizState.RELEASE));
 	}
 
 	/**
@@ -132,11 +130,7 @@ public class WmQuizController {
 	@GetMapping(value = "/quiz/plt/avail/list")
 	public R<List<WmQuiz>> listPltQuizzes() {
 
-		List<WmQuiz> quizzes = quizService.list(Wrappers.<WmQuiz>lambdaQuery()
-				.eq(WmQuiz::getEnterpriseId, upmsConfig.getPltEntId())
-				.eq(WmQuiz::getState, UpmsState.QuizState.RELEASE));
-
-		return R.ok(quizzes);
+		return R.ok(quizService.listEntQuizzes(upmsConfig.getPltEntId(), UpmsState.QuizState.RELEASE));
 	}
 
 	/**

+ 16 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/WmPlatformQuizTestResultMapper.java

@@ -0,0 +1,16 @@
+package com.qunzhixinxi.hnqz.admin.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmPlatformQuizTestResult;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * WmPlatformQuizTestResultMapper
+ *
+ * @author jimmy
+ * @version 1.0.0
+ * @date 2023-10-25 15:43
+ */
+@Mapper
+public interface WmPlatformQuizTestResultMapper extends BaseMapper<WmPlatformQuizTestResult> {
+}

+ 36 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmPlatformQuizTestResultService.java

@@ -0,0 +1,36 @@
+package com.qunzhixinxi.hnqz.admin.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmPlatformQuizTestResult;
+import com.qunzhixinxi.hnqz.admin.api.model.WmQuizResultModel;
+import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
+
+import java.util.List;
+
+/**
+ * WmPlatformQuizTestResultService
+ *
+ * @author jimmy
+ * @version 1.0.0
+ * @date 2023-10-25 15:44
+ */
+public interface WmPlatformQuizTestResultService extends IService<WmPlatformQuizTestResult> {
+
+	/**
+	 * 获取平台试卷结果
+	 *
+	 * @param userId  用户ID
+	 * @param quizIds 试卷ID
+	 * @return 答题结果
+	 */
+	List<WmPlatformQuizTestResult> listPltQuizResults(Integer userId, List<Integer> quizIds);
+
+	/**
+	 * 用户保存平台试卷测试结果
+	 *
+	 * @param quizResults 试卷结果
+	 * @param user        用户信息
+	 * @return 保存结果
+	 */
+	Boolean createQuizTestResult(WmQuizResultModel[] quizResults, HnqzUser user);
+}

+ 11 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmQuizService.java

@@ -3,8 +3,10 @@ package com.qunzhixinxi.hnqz.admin.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qunzhixinxi.hnqz.admin.api.dto.WmQuizDTO;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmQuiz;
+import com.qunzhixinxi.hnqz.common.core.constant.enums.UpmsState;
 import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -67,4 +69,13 @@ public interface WmQuizService extends IService<WmQuiz> {
 	 * @param serialNum 序列号
 	 */
 	void checkQuizExpand(WmQuiz.Expand expand, String serialNum);
+
+	/**
+	 * 获取企业的试卷
+	 *
+	 * @param entId     企业ID
+	 * @param quizState 试卷状态
+	 * @return 试卷列表
+	 */
+	List<WmQuiz> listEntQuizzes(Integer entId, UpmsState.QuizState quizState);
 }

+ 87 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmPlatformQuizTestResultServiceImpl.java

@@ -0,0 +1,87 @@
+package com.qunzhixinxi.hnqz.admin.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ArrayUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmPlatformQuizTestResult;
+import com.qunzhixinxi.hnqz.admin.api.model.WmQuizResultModel;
+import com.qunzhixinxi.hnqz.admin.mapper.WmPlatformQuizTestResultMapper;
+import com.qunzhixinxi.hnqz.admin.service.WmPlatformQuizTestResultService;
+import com.qunzhixinxi.hnqz.common.core.exception.BizException;
+import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * WmPlatformQuizTestResultServiceImpl
+ *
+ * @author jimmy
+ * @version 1.0.0
+ * @date 2023-10-25 15:44
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class WmPlatformQuizTestResultServiceImpl extends ServiceImpl<WmPlatformQuizTestResultMapper, WmPlatformQuizTestResult> implements WmPlatformQuizTestResultService {
+
+	/**
+	 * 获取平台试卷结果
+	 *
+	 * @param userId  用户ID
+	 * @param quizIds 试卷ID
+	 * @return 答题结果
+	 */
+	@Override
+	public List<WmPlatformQuizTestResult> listPltQuizResults(Integer userId, List<Integer> quizIds) {
+
+		List<WmPlatformQuizTestResult> results = this.list(Wrappers.<WmPlatformQuizTestResult>lambdaQuery()
+				.eq(userId != null, WmPlatformQuizTestResult::getUserId, userId)
+				.eq(CollUtil.isNotEmpty(quizIds), WmPlatformQuizTestResult::getQuizId, quizIds)
+				.orderByDesc(WmPlatformQuizTestResult::getCreateTime)
+		);
+
+		return CollUtil.isNotEmpty(results) ? results : Collections.emptyList();
+	}
+
+	/**
+	 * 用户保存平台试卷测试结果
+	 *
+	 * @param quizResults 试卷结果
+	 * @param user        用户信息
+	 * @return 保存结果
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public Boolean createQuizTestResult(WmQuizResultModel[] quizResults, HnqzUser user) {
+
+		if (ArrayUtil.isEmpty(quizResults)) {
+			log.error("问卷测试结果缺失");
+			throw new BizException("问卷测试结果缺失");
+		}
+		Integer userId = user.getId();
+		LocalDateTime now = LocalDateTime.now();
+
+		List<WmPlatformQuizTestResult> results = Stream.of(quizResults).map(qr -> {
+			WmPlatformQuizTestResult result = new WmPlatformQuizTestResult();
+			result.setUserId(userId);
+			result.setQuizId(qr.getQuizId());
+			result.setQuizResult(qr);
+			result.setExpiry(now.plusYears(1L).toLocalDate());
+			result.setCreateTime(now);
+
+			return result;
+		}).collect(Collectors.toList());
+
+		return this.saveBatch(results);
+	}
+}

+ 17 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmQuizServiceImpl.java

@@ -177,4 +177,21 @@ public class WmQuizServiceImpl extends ServiceImpl<WmQuizMapper, WmQuiz> impleme
 		}
 
 	}
+
+	/**
+	 * 获取企业的试卷
+	 *
+	 * @param entId     企业ID
+	 * @param quizState 试卷状态
+	 * @return 试卷列表
+	 */
+	@Override
+	public List<WmQuiz> listEntQuizzes(Integer entId, UpmsState.QuizState quizState) {
+
+		List<WmQuiz> quizzes = this.list(Wrappers.<WmQuiz>lambdaQuery()
+				.eq(WmQuiz::getEnterpriseId, entId)
+				.eq(WmQuiz::getState, quizState));
+
+		return CollUtil.isNotEmpty(quizzes) ? quizzes : Collections.emptyList();
+	}
 }

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels