Explorar el Código

feat:update quiz

shc hace 1 año
padre
commit
a6202f1fe5

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

@@ -1,6 +1,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.common.core.constant.enums.UpmsState;
 import com.qunzhixinxi.hnqz.common.core.constant.enums.UpmsType;
 import lombok.AccessLevel;
@@ -50,6 +51,23 @@ public final class WmQuizDTO {
 	@Data
 	public static class OnQuizUpdate {
 
+		@NotNull(message = "试卷编号必填")
+		private String sn;
+
+		@Valid
+		private WmQuiz.Expand expand;
+
+		/**
+		 * 标题
+		 */
+		@Length(max = 64, message = "标题最大支持字符数{max}")
+		private String title;
+
+		/**
+		 * 简介
+		 */
+		private String introduction;
+
 	}
 
 	@Data

+ 6 - 2
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/WmQuiz.java

@@ -10,6 +10,7 @@ import com.qunzhixinxi.hnqz.common.core.constant.enums.UpmsState;
 import com.qunzhixinxi.hnqz.common.core.constant.enums.UpmsType;
 import lombok.Data;
 
+import javax.validation.constraints.NotNull;
 import java.time.LocalDateTime;
 
 /**
@@ -93,11 +94,14 @@ public final class WmQuiz {
 	@Data
 	public static class Expand {
 
+		@NotNull(message = "试卷项数量必填")
 		private Integer itemQty;
 
-		private Integer totalScore;
+		@NotNull(message = "试卷总分必填")
+		private Integer totalMark;
 
-		private Integer passingScore;
+		@NotNull(message = "及格分数必填")
+		private Integer passingMark;
 
 	}
 

+ 10 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmQuizController.java

@@ -164,7 +164,16 @@ public class WmQuizController {
 	@PostMapping(value = "/quiz/update")
 	public R<Boolean> updateQuiz(@Valid @RequestBody WmQuizDTO.OnQuizUpdate resource) {
 
-		return R.ok();
+		WmQuiz.Expand expand = resource.getExpand();
+
+		if (expand != null) {
+			quizService.checkQuizExpand(expand, resource.getSn());
+		}
+
+
+		Boolean succ = quizService.updateQuiz(resource, SecurityUtils.getUser());
+
+		return succ ? R.ok(true, "更新试卷信息成功") : R.failed(false, "更新试卷信息失败");
 	}
 
 	/**

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

@@ -50,4 +50,21 @@ public interface WmQuizService extends IService<WmQuiz> {
 	 * @return 试卷编号
 	 */
 	String createQuiz(WmQuizDTO.OnQuizCreate resource, HnqzUser user);
+
+	/**
+	 * 更新试卷
+	 *
+	 * @param resource 试卷信息
+	 * @param user     操作人
+	 * @return 更新结果
+	 */
+	Boolean updateQuiz(WmQuizDTO.OnQuizUpdate resource, HnqzUser user);
+
+	/**
+	 * 校验试卷信息
+	 *
+	 * @param expand    试卷统计信息
+	 * @param serialNum 序列号
+	 */
+	void checkQuizExpand(WmQuiz.Expand expand, String serialNum);
 }

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

@@ -2,6 +2,7 @@ package com.qunzhixinxi.hnqz.admin.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qunzhixinxi.hnqz.admin.api.dto.WmQuizDTO;
@@ -11,6 +12,7 @@ import com.qunzhixinxi.hnqz.admin.mapper.WmQuizMapper;
 import com.qunzhixinxi.hnqz.admin.service.WmQuizItemService;
 import com.qunzhixinxi.hnqz.admin.service.WmQuizService;
 import com.qunzhixinxi.hnqz.common.core.constant.enums.UpmsState;
+import com.qunzhixinxi.hnqz.common.core.exception.BizException;
 import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -124,4 +126,54 @@ public class WmQuizServiceImpl extends ServiceImpl<WmQuizMapper, WmQuiz> impleme
 
 		return this.save(quiz) ? sn : "";
 	}
+
+	/**
+	 * 更新试卷
+	 *
+	 * @param resource 试卷信息
+	 * @param user     操作人
+	 * @return 更新结果
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public Boolean updateQuiz(WmQuizDTO.OnQuizUpdate resource, HnqzUser user) {
+
+		return this.update(Wrappers.<WmQuiz>lambdaUpdate()
+				.set(StrUtil.isNotBlank(resource.getTitle()), WmQuiz::getTitle, resource.getTitle())
+				.set(StrUtil.isNotBlank(resource.getIntroduction()), WmQuiz::getIntroduction, resource.getIntroduction())
+				.set(resource.getExpand() != null, WmQuiz::getExpand, resource.getExpand())
+				.set(WmQuiz::getUpdateBy, user.getUsername())
+				.set(WmQuiz::getUpdateTime, LocalDateTime.now())
+				.eq(WmQuiz::getSerialNumber, resource.getSn())
+		);
+	}
+
+	/**
+	 * 校验试卷信息
+	 *
+	 * @param serialNum 序列号
+	 * @param expand    试卷统计信息
+	 */
+	@Override
+	public void checkQuizExpand(WmQuiz.Expand expand, String serialNum) {
+		if (expand.getPassingMark() > expand.getTotalMark()) {
+			log.error("通过分数不能大于总分");
+			throw new BizException("通过分数不能大于总分");
+		}
+
+		List<WmQuizItem> items = quizItemService.listItems(serialNum);
+
+		if (expand.getItemQty() != items.size()) {
+			log.error("试卷项和参数值不符");
+			throw new BizException("试卷项和参数值不符");
+		}
+
+		int sum = items.stream().mapToInt(WmQuizItem::getMark).sum();
+
+		if (expand.getTotalMark() != sum) {
+			log.error("总分和参数值不符");
+			throw new BizException("总分和参数值不符");
+		}
+
+	}
 }