From c9e16545d4fa2064950acc30d09c75216912f488 Mon Sep 17 00:00:00 2001 From: xzb <223@qq.com> Date: Mon, 17 Oct 2022 14:17:27 +0800 Subject: [PATCH] paper --- .../paper/PaperCompositionController.java | 79 +++----- .../paper/PaperCompositionWithRuleVo.java | 121 +++++++++++++ .../paper/PaperCompositionService.java | 127 +++++++++++-- .../rtss/services/paper/PaperRuleService.java | 169 ------------------ .../rtss/vo/paper/PaperUserWholeVo.java | 3 +- .../convertor/PaperCompositionConvertor.java | 5 +- .../paper/convertor/PaperRuleConvertor.java | 20 ++- 7 files changed, 273 insertions(+), 251 deletions(-) create mode 100644 src/main/java/club/joylink/rtss/controller/paper/PaperCompositionWithRuleVo.java delete mode 100644 src/main/java/club/joylink/rtss/services/paper/PaperRuleService.java diff --git a/src/main/java/club/joylink/rtss/controller/paper/PaperCompositionController.java b/src/main/java/club/joylink/rtss/controller/paper/PaperCompositionController.java index efe32b438..fe37a58f9 100644 --- a/src/main/java/club/joylink/rtss/controller/paper/PaperCompositionController.java +++ b/src/main/java/club/joylink/rtss/controller/paper/PaperCompositionController.java @@ -1,7 +1,6 @@ package club.joylink.rtss.controller.paper; import club.joylink.rtss.services.paper.PaperCompositionService; -import club.joylink.rtss.services.paper.PaperRuleService; import club.joylink.rtss.vo.AccountVO; import club.joylink.rtss.vo.client.PageVO; import club.joylink.rtss.vo.paper.*; @@ -9,8 +8,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import java.util.List; - /** * 试卷蓝图业务接口 *

@@ -23,24 +20,27 @@ import java.util.List; public class PaperCompositionController { @Autowired private PaperCompositionService compositionService; - @Autowired - private PaperRuleService ruleService; /** - * 创建试卷蓝图 + * 创建试卷蓝图包括规则定义 + * + * @param orgId 组织id */ - @PostMapping - public CreatePaperCompositionRspVo createPaperComposition(@RequestBody CreatePaperCompositionReqVo req, @RequestAttribute AccountVO user) { - return compositionService.createPaperComposition(req, user); + @PostMapping("/{orgId}") + public CreatePaperCompositionRspVo createPaperCompositionWithRuleForOrg(@PathVariable("orgId") Long orgId, @RequestBody PaperCompositionWithRuleVo req, @RequestAttribute AccountVO user) { + req.setOrgId(orgId); + return this.compositionService.createPaperCompositionWithRule(req, user); } + /** - * 修改试卷蓝图基础信息 + * 更新试卷蓝图包括规则定义 */ - @PutMapping("/basic") - public void updatePaperCompositionProfile(@RequestBody PaperCompositionBasicVo req, @RequestAttribute AccountVO user) { - compositionService.updatePaperCompositionBasic(req, user); + @PutMapping + public void updatePaperCompositionWithRule(@RequestBody PaperCompositionWithRuleVo req, @RequestAttribute AccountVO user) { + this.compositionService.updatePaperCompositionWithRule(req, user); } + /** * 将编辑好的试卷蓝图封存 */ @@ -71,71 +71,34 @@ public class PaperCompositionController { * 根据(组织id、试卷蓝图名称简介)分页查找试卷蓝图 */ @PostMapping("/find/page") - public PageVO findPaperCompositionByPage(@RequestBody FindPaperCompositionPageReqVo req) { - + public PageVO findPaperCompositionByPage(@RequestBody FindPaperCompositionPageReqVo req) { return this.compositionService.findPaperCompositionByPage(req); } + /** * 根据试卷蓝图名称简介分页查找某个组织的试卷蓝图 */ @PostMapping("/find/page/for/{orgId}") - public PageVO findPaperCompositionForOrgByPage(@PathVariable("orgId") Long orgId, @RequestBody FindPaperCompositionPageReqVo req) { + public PageVO findPaperCompositionForOrgByPage(@PathVariable("orgId") Long orgId, @RequestBody FindPaperCompositionPageReqVo req) { req.setOrgId(orgId); return this.compositionService.findPaperCompositionByPage(req); } + /** * 根据账户分页查找试卷蓝图 */ @PostMapping("/find/page/by/account") - public PageVO findAccountPaperCompositionByPage(@RequestBody FindPaperCompositionByAccountReqVo req) { - + public PageVO findAccountPaperCompositionByPage(@RequestBody FindPaperCompositionByAccountReqVo req) { return this.compositionService.findPaperCompositionByPageForAccount(req); } + /** * 获取试卷完整的蓝图,包括规则 * * @param pcId 试卷蓝图id */ @GetMapping("/{pcId}") - public PaperCompositionVo findPaperComposition(@PathVariable("pcId") Long pcId, @RequestAttribute AccountVO user) { - return this.compositionService.findPaperComposition(pcId, user); + public PaperCompositionWithRuleVo findPaperComposition(@PathVariable("pcId") Long pcId, @RequestAttribute AccountVO user) { + return this.compositionService.findPaperComposition(pcId,user); } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - /** - * 试卷蓝图添加规则 - */ - @PostMapping("/rule") - public void createPaperCompositionRule(@RequestBody CreatePaperRuleReqVo req, @RequestAttribute AccountVO user) { - this.ruleService.createPaperCompositionRule(req, user); - } - - /** - * 更新(保存)试卷蓝图的规则 - */ - @PutMapping("/rule") - public void updatePaperCompositionRule(@RequestBody PaperRuleVo req, @RequestAttribute AccountVO user) { - this.ruleService.updatePaperCompositionRule(req, user); - } - - /** - * 删除试卷蓝图的规则 - * - * @param ruleId 规则id - */ - @DeleteMapping("/rule/{ruleId}") - public void deletePaperCompositionRule(@PathVariable("ruleId") Long ruleId, @RequestAttribute AccountVO user) { - this.ruleService.deletePaperCompositionRule(ruleId, user); - } - - /** - * 查询试卷蓝图的所有规则 - * - * @param pcId 试卷蓝图的id - */ - @GetMapping("/rule/all") - public List findAllPaperCompositionRule(@RequestParam("pcId") Long pcId, @RequestAttribute AccountVO user) { - return this.ruleService.findAllPaperCompositionRule(pcId, user); - } - } diff --git a/src/main/java/club/joylink/rtss/controller/paper/PaperCompositionWithRuleVo.java b/src/main/java/club/joylink/rtss/controller/paper/PaperCompositionWithRuleVo.java new file mode 100644 index 000000000..4f01362d4 --- /dev/null +++ b/src/main/java/club/joylink/rtss/controller/paper/PaperCompositionWithRuleVo.java @@ -0,0 +1,121 @@ +package club.joylink.rtss.controller.paper; + +import club.joylink.rtss.vo.paper.PaperCompositionState; +import club.joylink.rtss.vo.paper.PaperQType; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.time.LocalDateTime; +import java.util.List; + +@Data +public class PaperCompositionWithRuleVo { + /** + * 试卷蓝图id + */ + @NotNull + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** + * 试卷蓝图名称 + */ + private String name; + + /** + * 试卷蓝图简介 + */ + private String profile; + + /** + * 组织id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long orgId; + + /** + * 启用起始时间 + */ + private LocalDateTime startTime; + + /** + * 启用截止时间 + */ + private LocalDateTime endTime; + + /** + * 完成考试有效最长时长,单位min + */ + private Integer validDuration; + + /** + * 及格分 + */ + private Integer passScore; + /** + * 满分 + */ + private Integer fullScore; + + /** + * 创建者id + */ + private Long creatorId; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; + + /** + * 试卷蓝图状态:1-正在编辑,2-封存(不能修改),3-已经被使用(不能修改删除) + */ + private PaperCompositionState state; + + private List ruleList; + + @Data + public static class PaperRuleVo { + /** + * 试卷规则定义id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + /** + * 试卷蓝图的id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long pcId; + /** + * 试题类型:1-理论题,2-实训题 + */ + private PaperQType.GroupType type; + + /** + * 规则类型:理论题(1-单选题,2-多选题,3-判断题);实训题(4-单操实训,5-场景实训) + */ + private PaperQType.SubType subtype; + + /** + * 筛选题目的标签,即根据标签来筛选题目 + */ + private List tags; + + /** + * 该类型题目数量 + */ + private Integer amount; + + /** + * 每题分值 + */ + private Integer score; + } +} 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 d692ee690..83ae582ed 100644 --- a/src/main/java/club/joylink/rtss/services/paper/PaperCompositionService.java +++ b/src/main/java/club/joylink/rtss/services/paper/PaperCompositionService.java @@ -1,5 +1,6 @@ package club.joylink.rtss.services.paper; +import club.joylink.rtss.controller.paper.PaperCompositionWithRuleVo; import club.joylink.rtss.dao.SysAccountDAO; import club.joylink.rtss.dao.paper.PaperCompositionDAO; import club.joylink.rtss.dao.paper.PaperRuleDAO; @@ -14,15 +15,16 @@ import club.joylink.rtss.vo.AccountVO; import club.joylink.rtss.vo.client.PageVO; import club.joylink.rtss.vo.paper.*; import club.joylink.rtss.vo.paper.convertor.PaperCompositionConvertor; +import club.joylink.rtss.vo.paper.convertor.PaperRuleConvertor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.*; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -37,14 +39,12 @@ public class PaperCompositionService { private PaperRuleDAO ruleDAO; @Autowired private SysAccountDAO sysAccountDAO; - @Autowired - private PaperRuleService paperRuleService; /** - * 创建试卷蓝图 + * 创建试卷蓝图包括规则定义 */ @Transactional(rollbackFor = Exception.class) - public CreatePaperCompositionRspVo createPaperComposition(CreatePaperCompositionReqVo req, AccountVO user) { + public CreatePaperCompositionRspVo createPaperCompositionWithRule(PaperCompositionWithRuleVo req, AccountVO user) { //根据项目和名称来查,如果存在则结束 List pcList = this.findCompositionByCompanyIdAndName(req.getOrgId(), req.getName()); PaperExceptionAssert.PcNotExisted.assertTrue(CollectionUtils.isEmpty(pcList), "试卷定义已经存在:orgId=" + req.getOrgId() + " name=" + req.getName()); @@ -68,6 +68,11 @@ public class PaperCompositionService { 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()); + } + // CreatePaperCompositionRspVo rsp = new CreatePaperCompositionRspVo(); rsp.setId(newPc.getId()); rsp.setName(newPc.getName()); @@ -77,10 +82,25 @@ public class PaperCompositionService { } /** - * 修改试卷蓝图基础信息(名称、项目、简介) + * 试卷蓝图添加规则 + */ + private void createPaperCompositionRule(Long pcId, List reqList) { + reqList.forEach(req -> { + req.setPcId(pcId); + // + PaperQType.assertPaperSubTypeMatchGroupType(req.getSubtype(), req.getType()); + // + PaperRule rule = PaperRuleConvertor.convert(req); + // + ruleDAO.insertSelective(rule); + }); + } + + /** + * 更新试卷蓝图包括规则定义 */ @Transactional(rollbackFor = Exception.class) - public void updatePaperCompositionBasic(PaperCompositionBasicVo req, AccountVO user) { + public void updatePaperCompositionWithRule(PaperCompositionWithRuleVo req, AccountVO user) { PaperComposition curPc = compositionDAO.selectByPrimaryKey(req.getId()); assertPaperCompositionCanModify(curPc); // @@ -93,17 +113,56 @@ public class PaperCompositionService { } // curPc.setName(req.getName()); - curPc.setProfile(req.getProfile()); curPc.setOrgId(req.getOrgId()); - curPc.setUpdateTime(LocalDateTime.now()); + 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()); + curPc.setState(PaperCompositionState.Editing.getValue()); compositionDAO.updateByPrimaryKeySelective(curPc); - //校验分值 - PaperExceptionAssert.PcScore.assertTrue(paperRuleService.checkRulesScoreLessOrEqualFull(curPc.getId()),"规则总分值大于试卷总分值"); + // 更新规则 + this.updateCompositionRule(req.getRuleList(), req.getId()); + } + + private void updateCompositionRule(List updateRuleList, Long pcId) { + 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); + }); + } } /** @@ -119,7 +178,7 @@ public class PaperCompositionService { nPc.setState(PaperCompositionState.Locked.getValue()); compositionDAO.updateByPrimaryKeySelective(nPc); // 封存试卷时校验总分值与规则总分值是否相等 - PaperExceptionAssert.PcScore.assertTrue(paperRuleService.checkRulesScoreEqualFull(curPc.getId()),"规则总分值不等于试卷总分值"); + PaperExceptionAssert.PcScore.assertTrue(this.checkRulesScoreEqualFull(curPc.getId()), "规则总分值不等于试卷总分值"); } /** @@ -186,7 +245,7 @@ public class PaperCompositionService { } @Transactional(readOnly = true) - public PageVO findPaperCompositionByPageForAccount(FindPaperCompositionByAccountReqVo req) { + public PageVO findPaperCompositionByPageForAccount(FindPaperCompositionByAccountReqVo req) { PaperExceptionAssert.PpValid.assertTrue(null != req.getAccount() || null != req.getUserId(), "账号和用户id不能同时为空"); Long userId = req.getUserId(); if (null == userId) { @@ -223,7 +282,7 @@ public class PaperCompositionService { return pcState.getValue(); }).collect(Collectors.toList())); // - PageVO page = new PageVO<>(); + PageVO page = new PageVO<>(); // long sum = compositionDAO.countByExample(pcEx); page.setTotal(sum); @@ -269,7 +328,7 @@ public class PaperCompositionService { * 分页查找试卷蓝图 */ @Transactional(readOnly = true) - public PageVO findPaperCompositionByPage(FindPaperCompositionPageReqVo req) { + public PageVO findPaperCompositionByPage(FindPaperCompositionPageReqVo req) { PaperCompositionExample pcEx = new PaperCompositionExample(); PaperCompositionExample.Criteria pcExCriteria = pcEx.createCriteria(); if (null != req.getOrgId()) { @@ -294,7 +353,7 @@ public class PaperCompositionService { return pcState.getValue(); }).collect(Collectors.toList())); // - PageVO page = new PageVO<>(); + PageVO page = new PageVO<>(); long sum = compositionDAO.countByExample(pcEx); page.setTotal(sum); page.setPageNum(req.getPageNum()); @@ -341,12 +400,12 @@ public class PaperCompositionService { * @param pcId 试卷蓝图id */ @Transactional(readOnly = true) - public PaperCompositionVo findPaperComposition(Long pcId, AccountVO user) { + public PaperCompositionWithRuleVo findPaperComposition(Long pcId, AccountVO user) { PaperComposition curPc = compositionDAO.selectByPrimaryKey(pcId); PaperExceptionAssert.PcExisted.assertTrue(null != curPc, "试卷定义不存在:id=" + pcId); List paperRuleList = this.findRuleByPcId(pcId); // - PaperCompositionVo rt = PaperCompositionConvertor.convert(curPc, paperRuleList); + PaperCompositionWithRuleVo rt = PaperCompositionConvertor.convert(curPc, paperRuleList); return rt; } @@ -372,5 +431,35 @@ public class PaperCompositionService { example.createCriteria().andPcIdEqualTo(pcId); return ruleDAO.selectByExample(example); } + /** + * 校验规则当前规定的总分值是否小于等于试卷蓝图中的满分 + */ + private boolean checkRulesScoreLessOrEqualFull(Long pcId) { + PaperComposition curPc = compositionDAO.selectByPrimaryKey(pcId); + PaperExceptionAssert.PcExisted.assertTrue(null != curPc, String.format("试卷定义[id = %s]不存在", pcId)); + List ruleList = findRuleByPcId(pcId); + int ruleScore = 0; + if (!CollectionUtils.isEmpty(ruleList)) { + ruleScore = ruleList.stream().mapToInt(rule -> { + return rule.getScore() * rule.getAmount(); + }).sum(); + } + return ruleScore <= curPc.getFullScore(); + } + /** + * 校验规则当前规定的总分值是否等于试卷蓝图中的满分 + */ + private boolean checkRulesScoreEqualFull(Long pcId) { + PaperComposition curPc = compositionDAO.selectByPrimaryKey(pcId); + PaperExceptionAssert.PcExisted.assertTrue(null != curPc, String.format("试卷定义[id = %s]不存在", pcId)); + List ruleList = findRuleByPcId(pcId); + int ruleScore = 0; + if (!CollectionUtils.isEmpty(ruleList)) { + ruleScore = ruleList.stream().mapToInt(rule -> { + return rule.getScore() * rule.getAmount(); + }).sum(); + } + return ruleScore == curPc.getFullScore(); + } } diff --git a/src/main/java/club/joylink/rtss/services/paper/PaperRuleService.java b/src/main/java/club/joylink/rtss/services/paper/PaperRuleService.java deleted file mode 100644 index 00908a22b..000000000 --- a/src/main/java/club/joylink/rtss/services/paper/PaperRuleService.java +++ /dev/null @@ -1,169 +0,0 @@ -package club.joylink.rtss.services.paper; - -import club.joylink.rtss.dao.paper.PaperCompositionDAO; -import club.joylink.rtss.dao.paper.PaperRuleDAO; -import club.joylink.rtss.entity.paper.PaperComposition; -import club.joylink.rtss.entity.paper.PaperRule; -import club.joylink.rtss.entity.paper.PaperRuleExample; -import club.joylink.rtss.exception.PaperExceptionAssert; -import club.joylink.rtss.vo.AccountVO; -import club.joylink.rtss.vo.paper.CreatePaperRuleReqVo; -import club.joylink.rtss.vo.paper.PaperQType; -import club.joylink.rtss.vo.paper.PaperRuleVo; -import club.joylink.rtss.vo.paper.convertor.PaperRuleConvertor; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.CollectionUtils; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -@Service -public class PaperRuleService { - @Autowired - private PaperCompositionDAO compositionDAO; - @Autowired - private PaperRuleDAO ruleDAO; - @Autowired - private PaperCompositionService compositionService; - - /** - * 检测是否可以修改或更新规则 - */ - @Transactional(readOnly = true) - private void assertPaperCompositionRuleCanModify(Long ruleId) { - PaperRule rule = ruleDAO.selectByPrimaryKey(ruleId); - PaperExceptionAssert.PrExisted.assertNotNull(rule); - // - compositionService.assertPaperCompositionCanModify(rule.getPcId()); - } - - /** - * 试卷蓝图添加规则 - */ - @Transactional(rollbackFor = Exception.class) - public void createPaperCompositionRule(CreatePaperRuleReqVo req, AccountVO user) { - // - PaperQType.assertPaperSubTypeMatchGroupType(req.getSubtype(), req.getType()); - // - assertPaperCompositionRuleNotExist(req.getPcId(), req.getSubtype()); - compositionService.assertPaperCompositionCanModify(req.getPcId()); - // - PaperRule rule = PaperRuleConvertor.convert(req); - // - ruleDAO.insertSelective(rule); - //校验分值 - PaperExceptionAssert.PcScore.assertTrue(this.checkRulesScoreLessOrEqualFull(req.getPcId()),"规则总分值大于试卷总分值"); - } - - /** - * 断言试卷蓝图某类型的规则不存在 - */ - @Transactional(readOnly = true) - private void assertPaperCompositionRuleNotExist(Long pcId, PaperQType.SubType ruleType) { - PaperComposition curPc = compositionDAO.selectByPrimaryKey(pcId); - PaperRuleExample example = new PaperRuleExample(); - example.createCriteria().andPcIdEqualTo(pcId).andSubtypeEqualTo(ruleType.getValue()); - List list = ruleDAO.selectByExample(example); - PaperExceptionAssert.PrNotExisted.assertTrue(CollectionUtils.isEmpty(list), String.format("试卷定义(pcId=%s)的规则(%s)已经存在", pcId, ruleType.name())); - } - - /** - * 更新(保存)试卷蓝图的规则 - */ - @Transactional(rollbackFor = Exception.class) - public void updatePaperCompositionRule(PaperRuleVo req, AccountVO user) { - // - PaperQType.assertPaperSubTypeMatchGroupType(req.getSubtype(), req.getType()); - // - assertPaperCompositionRuleCanModify(req.getId()); - // - PaperComposition curPc = compositionDAO.selectByPrimaryKey(req.getPcId()); - PaperExceptionAssert.PcExisted.assertNotNull(curPc, "试卷定义不存在:id=" + req.getPcId()); - // - PaperRule updateRule = ruleDAO.selectByPrimaryKey(req.getId());//需要更新的规则 - PaperRuleExample findRuleEx = new PaperRuleExample(); - findRuleEx.createCriteria().andPcIdEqualTo(req.getPcId()).andTypeEqualTo(req.getType().getValue()).andSubtypeEqualTo(req.getSubtype().getValue()); - List findRuleList = ruleDAO.selectByExample(findRuleEx); - PaperRule rule = PaperRuleConvertor.convert(req); - if (CollectionUtils.isEmpty(findRuleList)) {//新类型,直接更新 - ruleDAO.updateByPrimaryKeySelective(rule); - } else {//类型不变,更新 - PaperRule findRule = findRuleList.get(0); - PaperExceptionAssert.PrNotExisted.assertTrue(updateRule.getId().compareTo(findRule.getId()) == 0, String.format("试卷定义规则已经存在,pcId=%s type=%s subType=%s", req.getPcId(), req.getType().name(), req.getSubtype().name())); - ruleDAO.updateByPrimaryKeySelective(rule); - } - //校验分值 - PaperExceptionAssert.PcScore.assertTrue(this.checkRulesScoreLessOrEqualFull(req.getPcId()),"规则总分值大于试卷总分值"); - } - - /** - * 删除试卷蓝图的规则 - * - * @param ruleId 规则id - */ - @Transactional(rollbackFor = Exception.class) - public void deletePaperCompositionRule(Long ruleId, AccountVO user) { - // - assertPaperCompositionRuleCanModify(ruleId); - // - ruleDAO.deleteByPrimaryKey(ruleId); - } - - /** - * 查询试卷蓝图的所有规则 - * - * @param pcId 试卷蓝图的id - */ - @Transactional(readOnly = true) - public List findAllPaperCompositionRule(Long pcId, AccountVO user) { - List list = findAllByPcId(pcId); - if (CollectionUtils.isEmpty(list)) return new ArrayList<>(); - return list.stream().map(pr -> { - return PaperRuleConvertor.convert(pr); - }).collect(Collectors.toList()); - } - - @Transactional(readOnly = true) - public List findAllByPcId(Long pcId) { - PaperRuleExample example = new PaperRuleExample(); - example.createCriteria().andPcIdEqualTo(pcId); - return ruleDAO.selectByExample(example); - } - - /** - * 校验规则当前规定的总分值是否小于等于试卷蓝图中的满分 - */ - @Transactional(readOnly = true) - public boolean checkRulesScoreLessOrEqualFull(Long pcId) { - PaperComposition curPc = compositionDAO.selectByPrimaryKey(pcId); - PaperExceptionAssert.PcExisted.assertTrue(null != curPc, String.format("试卷定义[id = %s]不存在", pcId)); - List ruleList = findAllByPcId(pcId); - int ruleScore = 0; - if (!CollectionUtils.isEmpty(ruleList)) { - ruleScore = ruleList.stream().mapToInt(rule -> { - return rule.getScore() * rule.getAmount(); - }).sum(); - } - return ruleScore <= curPc.getFullScore(); - } - - /** - * 校验规则当前规定的总分值是否等于试卷蓝图中的满分 - */ - @Transactional(readOnly = true) - public boolean checkRulesScoreEqualFull(Long pcId) { - PaperComposition curPc = compositionDAO.selectByPrimaryKey(pcId); - PaperExceptionAssert.PcExisted.assertTrue(null != curPc, String.format("试卷定义[id = %s]不存在", pcId)); - List ruleList = findAllByPcId(pcId); - int ruleScore = 0; - if (!CollectionUtils.isEmpty(ruleList)) { - ruleScore = ruleList.stream().mapToInt(rule -> { - return rule.getScore() * rule.getAmount(); - }).sum(); - } - return ruleScore == curPc.getFullScore(); - } -} diff --git a/src/main/java/club/joylink/rtss/vo/paper/PaperUserWholeVo.java b/src/main/java/club/joylink/rtss/vo/paper/PaperUserWholeVo.java index 5346d6237..b20dcc6e8 100644 --- a/src/main/java/club/joylink/rtss/vo/paper/PaperUserWholeVo.java +++ b/src/main/java/club/joylink/rtss/vo/paper/PaperUserWholeVo.java @@ -1,5 +1,6 @@ package club.joylink.rtss.vo.paper; +import club.joylink.rtss.controller.paper.PaperCompositionWithRuleVo; import lombok.Data; import java.util.List; @@ -12,7 +13,7 @@ public class PaperUserWholeVo { /** * 试卷蓝图 */ - private PaperCompositionVo composition; + private PaperCompositionWithRuleVo composition; /** * 用户试卷 */ 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 0f2a9f15a..428938249 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 @@ -1,5 +1,6 @@ package club.joylink.rtss.vo.paper.convertor; +import club.joylink.rtss.controller.paper.PaperCompositionWithRuleVo; import club.joylink.rtss.entity.paper.PaperComposition; import club.joylink.rtss.entity.paper.PaperRule; import club.joylink.rtss.vo.paper.PaperCompositionState; @@ -9,8 +10,8 @@ import java.util.ArrayList; import java.util.List; public class PaperCompositionConvertor { - public static PaperCompositionVo convert(PaperComposition from, List ruleList){ - PaperCompositionVo to = new PaperCompositionVo(); + public static PaperCompositionWithRuleVo convert(PaperComposition from, List ruleList){ + PaperCompositionWithRuleVo to = new PaperCompositionWithRuleVo(); to.setId(from.getId()); to.setName(from.getName()); to.setProfile(from.getProfile()); diff --git a/src/main/java/club/joylink/rtss/vo/paper/convertor/PaperRuleConvertor.java b/src/main/java/club/joylink/rtss/vo/paper/convertor/PaperRuleConvertor.java index c75304f30..ee5d22433 100644 --- a/src/main/java/club/joylink/rtss/vo/paper/convertor/PaperRuleConvertor.java +++ b/src/main/java/club/joylink/rtss/vo/paper/convertor/PaperRuleConvertor.java @@ -1,5 +1,6 @@ package club.joylink.rtss.vo.paper.convertor; +import club.joylink.rtss.controller.paper.PaperCompositionWithRuleVo; import club.joylink.rtss.entity.paper.PaperRule; import club.joylink.rtss.util.JsonUtils; import club.joylink.rtss.vo.paper.CreatePaperRuleReqVo; @@ -11,8 +12,8 @@ import java.util.ArrayList; public class PaperRuleConvertor { - public static PaperRuleVo convert(PaperRule from) { - PaperRuleVo to = new PaperRuleVo(); + public static PaperCompositionWithRuleVo.PaperRuleVo convert(PaperRule from) { + PaperCompositionWithRuleVo.PaperRuleVo to = new PaperCompositionWithRuleVo.PaperRuleVo(); to.setId(from.getId()); to.setPcId(from.getPcId()); to.setType(PaperQType.GroupType.getItem(from.getType())); @@ -23,6 +24,21 @@ public class PaperRuleConvertor { return to; } + public static PaperRule convert(PaperCompositionWithRuleVo.PaperRuleVo from) { + PaperRule to = new PaperRule(); + to.setId(from.getId()); + to.setPcId(from.getPcId()); + to.setType(from.getType().getValue()); + to.setSubtype(from.getSubtype().getValue()); + if (!CollectionUtils.isEmpty(from.getTags())) { + to.setTags(JsonUtils.writeValueAsString(from.getTags())); + } else { + to.setTags(JsonUtils.writeValueAsString(new ArrayList())); + } + to.setScore(from.getScore()); + to.setAmount(from.getAmount()); + return to; + } public static PaperRule convert(PaperRuleVo from) { PaperRule to = new PaperRule(); to.setId(from.getId());