diff --git a/src/main/java/club/joylink/rtss/controller/paper/PaperUserController.java b/src/main/java/club/joylink/rtss/controller/paper/PaperUserController.java index 724edea5f..d3484253a 100644 --- a/src/main/java/club/joylink/rtss/controller/paper/PaperUserController.java +++ b/src/main/java/club/joylink/rtss/controller/paper/PaperUserController.java @@ -54,20 +54,20 @@ public class PaperUserController { * * @param puId 用户试卷id */ - @DeleteMapping("/user/{puId}") + /*@DeleteMapping("/user/{puId}") public void deletePaperUser(@PathVariable("puId") Long puId, @RequestAttribute AccountVO user) { this.paperUserService.deletePaperUser(puId); - } + }*/ /** * 开始答题 * * @param puId 用户试卷id */ - @PostMapping("/user/{puId}/start") +/* @PostMapping("/user/{puId}/start") public void paperStart(@PathVariable("puId") Long puId, @RequestAttribute AccountVO user) { this.paperUserService.paperStart(puId); - } + }*/ /** * 用户交卷 diff --git a/src/main/java/club/joylink/rtss/services/paper/PaperCompositionService.java b/src/main/java/club/joylink/rtss/services/paper/PaperCompositionService.java index 3259ec391..d4c0347c4 100644 --- a/src/main/java/club/joylink/rtss/services/paper/PaperCompositionService.java +++ b/src/main/java/club/joylink/rtss/services/paper/PaperCompositionService.java @@ -57,27 +57,15 @@ public class PaperCompositionService { && (Objects.isNull(d.getSubTypeParam()) || Objects.isNull(d.getSubTypeParam().getClient()))).findAny(); PaperExceptionAssert.PcNotHavePr.assertTrue(optionalRule.isEmpty(), "试卷规则-单操缺少客户端的定义"); - // - PaperComposition newPc = new PaperComposition(); - newPc.setMapId(req.getMapId()); - newPc.setName(req.getName()); - newPc.setOrgId(req.getOrgId()); - newPc.setProfile(req.getProfile()); - newPc.setStartTime(req.getStartTime()); - newPc.setEndTime(req.getEndTime()); - newPc.setValidDuration(req.getValidDuration()); - newPc.setPassScore(req.getPassScore()); - newPc.setFullScore(req.getFullScore()); + PaperComposition newPc = PaperCompositionConvertor.convertToBean(req); + newPc.setCreateTime(LocalDateTime.now()); newPc.setUpdateTime(LocalDateTime.now()); newPc.setCreatorId(user.getId()); + newPc.setUpdateId(user.getId()); newPc.setState(PaperCompositionState.Editing.getValue()); compositionDAO.insertSelective(newPc); -// PaperExceptionAssert.PcStoreSuccess.assertTrue(newRt > 0, "存储试卷定义失败"); - // -// pcList = this.findCompositionByCompanyIdAndName(req.getOrgId(), req.getName()); -// newPc = pcList.get(0); - // + if (!CollectionUtils.isEmpty(req.getRuleList())) { final Long pcId = newPc.getId(); this.createPaperCompositionRule(pcId, req.getRuleList()); @@ -95,31 +83,21 @@ public class PaperCompositionService { String key = String.format("%s-%s-%s",vo.getType(),vo.getSubtype(), CollectionUtils.isEmpty(vo.getTags())? "" : Joiner.on(",").join(vo.getTags())); return key; } + /** * 试卷蓝图添加规则 */ private void createPaperCompositionRule(Long pcId, List reqList) { - Map> tmpList = reqList.stream().collect(Collectors.groupingBy(k->ruleMapKey(k))); + Map> tmpList = reqList.stream().collect(Collectors.groupingBy(this::ruleMapKey)); for (PaperCompositionWithRuleVo.PaperRuleVo req : reqList) { req.setPcId(pcId); - - // PaperQType.assertPaperSubTypeMatchGroupType(req.getSubtype(), req.getType()); String key = this.ruleMapKey(req); List voList = tmpList.get(key); - if(!CollectionUtils.isEmpty(voList)){ - //检测一个规则只能有一个 - BusinessExceptionAssertEnum.ARGUMENT_ILLEGAL.assertTrue(voList.size() <= 1 ,String.format("试题规则类型[%s],规则类型[%s],分类%s 规则只能有一个", PaperQType.GroupType.getTypeName(req.getType()), PaperQType.SubType.getItemName(req.getSubtype()),req.getTags())); - } - - // - if(!CollectionUtils.isEmpty(req.getTags())){ - BusinessExceptionAssertEnum.ARGUMENT_ILLEGAL.assertTrue(req.getTags().size() <= 1 ,String.format("试题规则类型[%s],规则类型[%s],分类%s最多只能有一个", PaperQType.GroupType.getTypeName(req.getType()), PaperQType.SubType.getItemName(req.getSubtype()),req.getTags())); - } + BusinessExceptionAssertEnum.ARGUMENT_ILLEGAL.assertTrue(!CollectionUtils.isEmpty(voList) && voList.size() <= 1 ,String.format("试题规则类型[%s],规则类型[%s] 规则只能有一个", PaperQType.GroupType.getTypeName(req.getType()), PaperQType.SubType.getItemName(req.getSubtype()))); + BusinessExceptionAssertEnum.ARGUMENT_ILLEGAL.assertTrue(!CollectionUtils.isEmpty(req.getTags()) && req.getTags().size() <= 1 ,String.format("试题规则类型[%s],规则类型[%s],分类%s最多只能有一个", PaperQType.GroupType.getTypeName(req.getType()), PaperQType.SubType.getItemName(req.getSubtype()),req.getTags())); PaperRule rule = PaperRuleConvertor.convert(req); - - // ruleDAO.insertSelective(rule); } } @@ -130,6 +108,10 @@ public class PaperCompositionService { @Transactional(rollbackFor = Exception.class) public void updatePaperCompositionWithRule(PaperCompositionWithRuleVo req, AccountVO user) { PaperExceptionAssert.PcNotExisted.assertTrue(Objects.nonNull(req.getMapId()), "请选择对应的线路"); + Optional optionalRule = req.getRuleList().stream().filter(d->d.getSubtype() == PaperQType.SubType.Single + && (Objects.isNull(d.getSubTypeParam()) || Objects.isNull(d.getSubTypeParam().getClient()))).findAny(); + PaperExceptionAssert.PcNotHavePr.assertTrue(optionalRule.isEmpty(), "试卷规则-单操缺少客户端的定义"); + PaperComposition curPc = compositionDAO.selectByPrimaryKey(req.getId()); assertPaperCompositionCanModify(curPc); // @@ -138,21 +120,11 @@ public class PaperCompositionService { boolean exist = pcList.stream().anyMatch(c ->c.getId().compareTo(curPc.getId()) != 0); PaperExceptionAssert.PcExisted.assertNotTrue(exist, "试卷定义已经存在:orgId=" + req.getOrgId() + " name=" + req.getName()); } - // - curPc.setMapId(req.getMapId()); - curPc.setName(req.getName()); - curPc.setOrgId(req.getOrgId()); - curPc.setProfile(req.getProfile()); - curPc.setStartTime(req.getStartTime()); - curPc.setEndTime(req.getEndTime()); - curPc.setValidDuration(req.getValidDuration()); - curPc.setPassScore(req.getPassScore()); - curPc.setFullScore(req.getFullScore()); - curPc.setCreateTime(LocalDateTime.now()); - curPc.setUpdateTime(LocalDateTime.now()); - curPc.setCreatorId(user.getId()); + PaperComposition newPc = PaperCompositionConvertor.convertToBean(req); + newPc.setId(curPc.getId()); + newPc.setUpdateTime(LocalDateTime.now()); curPc.setUpdateId(user.getId()); - compositionDAO.updateByPrimaryKeySelective(curPc); + compositionDAO.updateByPrimaryKeySelective(newPc); // 更新规则 this.updateCompositionRule(req.getRuleList(), req.getId()); } @@ -162,39 +134,6 @@ public class PaperCompositionService { ruleExample.createCriteria().andPcIdEqualTo(pcId); this.ruleDAO.deleteByExample(ruleExample); this.createPaperCompositionRule(pcId,updateRuleList); -/* List oldRuleList = this.findRuleByPcId(pcId); - Set oldRuleIdSet = new HashSet<>(); - if (!CollectionUtils.isEmpty(oldRuleList)) { - oldRuleIdSet = oldRuleList.stream().map(PaperRule::getId).collect(Collectors.toSet()); - } - // - List needUpdate = new ArrayList<>(); - List needNew = new ArrayList<>(); - for (PaperCompositionWithRuleVo.PaperRuleVo ur : updateRuleList) { - if (null == ur.getId()) { - needNew.add(ur); - } else { - PaperExceptionAssert.PdValid.assertTrue(oldRuleIdSet.contains(ur.getId()), String.format("试卷定义[id = %s]要更新的规则[id = %s]不存在", pcId, ur.getId())); - needUpdate.add(ur); - } - } - oldRuleIdSet.removeAll(needUpdate.stream().map(PaperCompositionWithRuleVo.PaperRuleVo::getId).collect(Collectors.toSet())); - Set neeDelete = oldRuleIdSet; - // - if (!CollectionUtils.isEmpty(needNew)) { - this.createPaperCompositionRule(pcId, needNew); - } - if (!CollectionUtils.isEmpty(needUpdate)) { - needUpdate.forEach(nu -> { - PaperRule paperRule = PaperRuleConvertor.convert(nu); - this.ruleDAO.updateByPrimaryKeySelective(paperRule); - }); - } - if (!CollectionUtils.isEmpty(neeDelete)) { - neeDelete.forEach(nd -> { - this.ruleDAO.deleteByPrimaryKey(nd); - }); - }*/ } /** @@ -204,13 +143,13 @@ public class PaperCompositionService { public void lockPaperComposition(Long pcId, AccountVO user) { PaperComposition curPc = compositionDAO.selectByPrimaryKey(pcId); PaperExceptionAssert.PcCanModify.assertTrue(null != curPc && PaperCompositionState.Editing.equals(PaperCompositionState.getItem(curPc.getState())), "试卷定义不存在或非编辑中"); + PaperExceptionAssert.PcScore.assertTrue(this.checkRulesScoreEqualFull(curPc.getId()), "规则总分值不等于试卷总分值"); // PaperComposition nPc = new PaperComposition(); nPc.setId(curPc.getId()); nPc.setState(PaperCompositionState.Locked.getValue()); compositionDAO.updateByPrimaryKeySelective(nPc); // 封存试卷时校验总分值与规则总分值是否相等 - PaperExceptionAssert.PcScore.assertTrue(this.checkRulesScoreEqualFull(curPc.getId()), "规则总分值不等于试卷总分值"); } /** diff --git a/src/main/java/club/joylink/rtss/services/paper/PaperUserService.java b/src/main/java/club/joylink/rtss/services/paper/PaperUserService.java index 796cc5263..e2b772253 100644 --- a/src/main/java/club/joylink/rtss/services/paper/PaperUserService.java +++ b/src/main/java/club/joylink/rtss/services/paper/PaperUserService.java @@ -143,6 +143,7 @@ public class PaperUserService { * * @param puId 用户试卷id */ +/* @Transactional(rollbackFor = Exception.class) public void paperStart(Long puId) { PaperUser paper = paperUserDAO.selectByPrimaryKey(puId); @@ -153,6 +154,7 @@ public class PaperUserService { startPaper.setStartTime(LocalDateTime.now()); paperUserDAO.updateByPrimaryKeySelective(startPaper); } +*/ /** * 用户交卷 diff --git a/src/main/java/club/joylink/rtss/vo/paper/PaperQType.java b/src/main/java/club/joylink/rtss/vo/paper/PaperQType.java index 31a54137b..f9a73bf3d 100644 --- a/src/main/java/club/joylink/rtss/vo/paper/PaperQType.java +++ b/src/main/java/club/joylink/rtss/vo/paper/PaperQType.java @@ -100,6 +100,10 @@ public class PaperQType { return "多选题"; case Judge: return "判断题"; + case Single: + return "单操实训"; + case Scene: + return "场景实训"; default: return null; } diff --git a/src/main/java/club/joylink/rtss/vo/paper/convertor/PaperCompositionConvertor.java b/src/main/java/club/joylink/rtss/vo/paper/convertor/PaperCompositionConvertor.java index dbad3f40f..d5362abb8 100644 --- a/src/main/java/club/joylink/rtss/vo/paper/convertor/PaperCompositionConvertor.java +++ b/src/main/java/club/joylink/rtss/vo/paper/convertor/PaperCompositionConvertor.java @@ -5,10 +5,24 @@ import club.joylink.rtss.entity.paper.PaperComposition; import club.joylink.rtss.entity.paper.PaperRule; import club.joylink.rtss.vo.paper.PaperCompositionState; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; public class PaperCompositionConvertor { + public static PaperComposition convertToBean(PaperCompositionWithRuleVo ruleVO){ + PaperComposition newPc = new PaperComposition(); + newPc.setMapId(ruleVO.getMapId()); + newPc.setName(ruleVO.getName()); + newPc.setOrgId(ruleVO.getOrgId()); + newPc.setProfile(ruleVO.getProfile()); + newPc.setStartTime(ruleVO.getStartTime()); + newPc.setEndTime(ruleVO.getEndTime()); + newPc.setValidDuration(ruleVO.getValidDuration()); + newPc.setPassScore(ruleVO.getPassScore()); + newPc.setFullScore(ruleVO.getFullScore()); + return newPc; + } public static PaperCompositionWithRuleVo convert(PaperComposition from, List ruleList){ PaperCompositionWithRuleVo to = new PaperCompositionWithRuleVo(); to.setMapId(from.getMapId());