Selaa lähdekoodia

feat: save user platform quiz test result

shc 1 vuosi sitten
vanhempi
commit
06cd9ce6d4

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

+ 19 - 3
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java

@@ -26,6 +26,7 @@ import com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants;
 import com.qunzhixinxi.hnqz.admin.api.constant.UpmsType;
 import com.qunzhixinxi.hnqz.admin.api.dto.UserDTO;
 import com.qunzhixinxi.hnqz.admin.api.dto.WmPkgDTO;
+import com.qunzhixinxi.hnqz.admin.api.dto.WmQuizDTO;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDeptCsm;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDictItem;
@@ -3999,18 +4000,18 @@ public class ApiController {
 		// 获取平台的问卷 和 答题的情况
 		List<WmQuiz> quizzes = quizService.listEntQuizzes(upmsConfig.getPltEntId(), UpmsState.QuizState.RELEASE);
 		List<Map<String, Object>> histories = new LinkedList<>();
-		if (CollUtil.isNotEmpty(quizzes)){
+		if (CollUtil.isNotEmpty(quizzes)) {
 			List<Integer> quizIds = quizzes.stream().mapToInt(WmQuiz::getQuizId).boxed().distinct().collect(Collectors.toList());
 			Map<Integer, List<WmPlatformQuizTestResult>> collect =
 					platformQuizTestResultService.listPltQuizResults(user.getId(), quizIds).stream()
 							.collect(Collectors.groupingBy(WmPlatformQuizTestResult::getQuizId));
 			LocalDate today = LocalDate.now();
-			for (WmQuiz quiz : quizzes){
+			for (WmQuiz quiz : quizzes) {
 				Map<String, Object> history = new HashMap<>(3);
 				history.put("quiz", quiz);
 				List<WmPlatformQuizTestResult> quizTestResults = collect.get(quiz.getQuizId());
 				// 存在历史答题记录
-				if (CollUtil.isNotEmpty(quizTestResults)){
+				if (CollUtil.isNotEmpty(quizTestResults)) {
 					// 已经倒序排了, 所以一定是最后的答题结果
 					WmPlatformQuizTestResult historyResult = quizTestResults.get(0);
 					history.put("expiryDate", historyResult.getExpiry());
@@ -4034,6 +4035,21 @@ public class ApiController {
 
 	}
 
+	/**
+	 * 用户保存平台试卷测试结果
+	 *
+	 * @param resource 测试结果
+	 * @return 保存结果
+	 */
+	@SysLog(value = "用户保存平台试卷测试结果")
+	@PostMapping(value = "/quiz/plt/test/result/create")
+	public R<Boolean> createUserPltQuizTestResult(@Valid @RequestBody WmQuizDTO.OnUserPltTestResultCreate resource) {
+		HnqzUser user = SecurityUtils.getUser();
+
+		Boolean succ = platformQuizTestResultService.createQuizTestResult(resource.getQuizResults(), user);
+
+		return succ ? R.ok(true, "保存测试结果成功") : R.failed(false, "保存测试结果失败");
+	}
 
 
 }

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

@@ -2,6 +2,8 @@ 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;
 
@@ -22,4 +24,13 @@ public interface WmPlatformQuizTestResultService extends IService<WmPlatformQuiz
 	 * @return 答题结果
 	 */
 	List<WmPlatformQuizTestResult> listPltQuizResults(Integer userId, List<Integer> quizIds);
+
+	/**
+	 * 用户保存平台试卷测试结果
+	 *
+	 * @param quizResults 试卷结果
+	 * @param user        用户信息
+	 * @return 保存结果
+	 */
+	Boolean createQuizTestResult(WmQuizResultModel[] quizResults, HnqzUser user);
 }

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

@@ -1,17 +1,26 @@
 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
@@ -43,4 +52,36 @@ public class WmPlatformQuizTestResultServiceImpl extends ServiceImpl<WmPlatformQ
 
 		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);
+	}
 }