|
@@ -0,0 +1,165 @@
|
|
|
|
+package com.qunzhixinxi.hnqz.admin.controller;
|
|
|
|
+
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
|
+import com.qunzhixinxi.hnqz.admin.api.dto.WmQuizDTO;
|
|
|
|
+import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
|
|
|
|
+import com.qunzhixinxi.hnqz.admin.api.entity.WmQuizItem;
|
|
|
|
+import com.qunzhixinxi.hnqz.admin.api.vo.WmQuizVO;
|
|
|
|
+import com.qunzhixinxi.hnqz.admin.service.SysUserService;
|
|
|
|
+import com.qunzhixinxi.hnqz.admin.service.WmQuizItemService;
|
|
|
|
+import com.qunzhixinxi.hnqz.admin.service.WmQuizService;
|
|
|
|
+import com.qunzhixinxi.hnqz.common.core.exception.BizException;
|
|
|
|
+import com.qunzhixinxi.hnqz.common.core.util.R;
|
|
|
|
+import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
|
|
|
|
+import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
|
|
|
|
+import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
|
|
|
|
+import lombok.AllArgsConstructor;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import org.springframework.web.bind.annotation.GetMapping;
|
|
|
|
+import org.springframework.web.bind.annotation.PostMapping;
|
|
|
|
+import org.springframework.web.bind.annotation.RequestBody;
|
|
|
|
+import org.springframework.web.bind.annotation.RequestParam;
|
|
|
|
+import org.springframework.web.bind.annotation.RestController;
|
|
|
|
+
|
|
|
|
+import javax.validation.Valid;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
|
|
+import java.util.Set;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * 试卷前端控制器
|
|
|
|
+ *
|
|
|
|
+ * @author jimmy
|
|
|
|
+ * @version 1.0.0
|
|
|
|
+ * @date 2023-10-16 16:03
|
|
|
|
+ */
|
|
|
|
+@Slf4j
|
|
|
|
+@RestController
|
|
|
|
+@AllArgsConstructor
|
|
|
|
+public class WmQuizController {
|
|
|
|
+
|
|
|
|
+ private final SysUserService userService;
|
|
|
|
+
|
|
|
|
+ private final WmQuizService quizService;
|
|
|
|
+ private final WmQuizItemService quizItemService;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 获取试题详情
|
|
|
|
+ *
|
|
|
|
+ * @param itemId 试题ID
|
|
|
|
+ * @return 详情
|
|
|
|
+ */
|
|
|
|
+ @GetMapping(value = "/quiz/item/details")
|
|
|
|
+ public R<WmQuizItem> getItemDetails(@RequestParam(value = "itemId", required = false) Integer itemId,
|
|
|
|
+ @RequestParam(value = "sn", required = false) String sn) {
|
|
|
|
+
|
|
|
|
+ if (itemId == null && StrUtil.isBlank(sn)) {
|
|
|
|
+ log.error("试题编号或者ID缺失");
|
|
|
|
+ throw new BizException("试题编号或者ID缺失");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ WmQuizItem item = quizItemService.getItemDetails(itemId, sn);
|
|
|
|
+ return R.ok(item);
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 获取试卷项分页
|
|
|
|
+ *
|
|
|
|
+ * @param current 当前页
|
|
|
|
+ * @param size 每页记录数
|
|
|
|
+ * @param label 试题标题
|
|
|
|
+ * @return 分页结果
|
|
|
|
+ */
|
|
|
|
+ @GetMapping(value = "/quiz/item/page")
|
|
|
|
+ public R<Page<?>> pageQuizItems(@RequestParam(value = "current", defaultValue = "1") Integer current,
|
|
|
|
+ @RequestParam(value = "size", defaultValue = "20") Integer size,
|
|
|
|
+ @RequestParam(value = "label", required = false) String label) {
|
|
|
|
+ // 获取试题信息
|
|
|
|
+ Page<WmQuizItem> itemPage = quizItemService.pageQuizItems(current, size, label);
|
|
|
|
+
|
|
|
|
+ List<WmQuizItem> records = itemPage.getRecords();
|
|
|
|
+
|
|
|
|
+ // 不存在试题的情况
|
|
|
|
+ if (CollUtil.isEmpty(records)) {
|
|
|
|
+ return R.ok(itemPage);
|
|
|
|
+ }
|
|
|
|
+ // 封装包含创建人的实体信息
|
|
|
|
+ else {
|
|
|
|
+ Set<String> usernames = records.stream().map(WmQuizItem::getCreateBy).collect(Collectors.toSet());
|
|
|
|
+
|
|
|
|
+ Map<String, List<SysUser>> users = userService.mapUsersByUsername(usernames);
|
|
|
|
+
|
|
|
|
+ List<WmQuizVO.ToItemPageVO> vos = records.stream().map(item -> {
|
|
|
|
+ WmQuizVO.ToItemPageVO vo = new WmQuizVO.ToItemPageVO();
|
|
|
|
+ vo.setItemId(item.getItemId());
|
|
|
|
+ vo.setSerialNum(item.getSerialNumber());
|
|
|
|
+ vo.setLabel(item.getLabel());
|
|
|
|
+ vo.setCreateTime(item.getCreateTime());
|
|
|
|
+ SysUser sysUser = users.get(item.getCreateBy()).get(0);
|
|
|
|
+ vo.setCreateBy(sysUser == null ? "" : sysUser.getRealname());
|
|
|
|
+ return vo;
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
+
|
|
|
|
+ Page<WmQuizVO.ToItemPageVO> pages = new Page<>();
|
|
|
|
+ pages.setCurrent(current);
|
|
|
|
+ pages.setSize(size);
|
|
|
|
+ pages.setPages(itemPage.getPages());
|
|
|
|
+ pages.setRecords(vos);
|
|
|
|
+ pages.setTotal(itemPage.getTotal());
|
|
|
|
+
|
|
|
|
+ return R.ok(pages);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 创建试卷项
|
|
|
|
+ *
|
|
|
|
+ * @param resource 试卷项内容
|
|
|
|
+ * @return 创建结果
|
|
|
|
+ */
|
|
|
|
+ @SysLog("创建试卷项")
|
|
|
|
+ @PostMapping(value = "/quiz/item/create")
|
|
|
|
+ public R<Boolean> createQuizItem(@Valid @RequestBody WmQuizDTO.OnItemCreate resource) {
|
|
|
|
+
|
|
|
|
+ HnqzUser operator = SecurityUtils.getUser();
|
|
|
|
+ Boolean passed = quizItemService.checkItem(operator, resource.getLabel(), null);
|
|
|
|
+
|
|
|
|
+ if (!passed) {
|
|
|
|
+ String errorMsg = String.format("存在标题重复的试题,[%s]", resource.getLabel());
|
|
|
|
+ log.error(errorMsg);
|
|
|
|
+ throw new BizException(errorMsg);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ Boolean succ = quizItemService.createItem(resource, operator);
|
|
|
|
+ return succ ? R.ok(succ, "添加试题成功") : R.failed(succ, "添加试题失败");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 更新试卷项
|
|
|
|
+ *
|
|
|
|
+ * @param resource 试卷项
|
|
|
|
+ * @return 更新结果
|
|
|
|
+ */
|
|
|
|
+ @SysLog("更新试卷项")
|
|
|
|
+ @PostMapping(value = "/quiz/item/update")
|
|
|
|
+ public R<Boolean> updateQuizItem(@Valid @RequestBody WmQuizDTO.OnItemUpdate resource) {
|
|
|
|
+
|
|
|
|
+ HnqzUser operator = SecurityUtils.getUser();
|
|
|
|
+ Boolean passed = quizItemService.checkItem(operator, resource.getLabel(), resource.getItemId());
|
|
|
|
+ if (!passed) {
|
|
|
|
+ String errorMsg = String.format("存在标题重复的试题,[%s]", resource.getLabel());
|
|
|
|
+ log.error(errorMsg);
|
|
|
|
+ throw new BizException(errorMsg);
|
|
|
|
+ }
|
|
|
|
+ Boolean succ = quizItemService.updateItem(resource, operator);
|
|
|
|
+ return succ ? R.ok(succ, "更新试题成功") : R.failed(succ, "更新试题失败");
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|