From 2762f6179a823aad8104a5bb9cf81188053cf652 Mon Sep 17 00:00:00 2001 From: wanggeng <450292408@qq.com> Date: Thu, 26 May 2022 12:11:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=AF=95=E5=8D=B7=E8=AF=95?= =?UTF-8?q?=E9=A2=98=E9=80=89=E6=8B=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../question/PaperQuestionController.java | 40 ++++- .../PaperQuestionRouteController.java | 6 + .../dao/paper/question/IPaperQuestionDao.java | 10 ++ .../paper/question/IPaperQuestionService.java | 26 +++ .../impl/PaperQuestionServiceImpl.java | 31 +++- .../paper/question/paper-question-mapper.xml | 85 +++++++++ .../templates/paper/question/list.html | 33 +--- .../{list-select.html => save-select.html} | 165 ++++++++---------- 8 files changed, 265 insertions(+), 131 deletions(-) rename module-examine/src/main/resources/templates/paper/question/{list-select.html => save-select.html} (79%) diff --git a/module-examine/src/main/java/ink/wgink/module/examine/controller/api/paper/question/PaperQuestionController.java b/module-examine/src/main/java/ink/wgink/module/examine/controller/api/paper/question/PaperQuestionController.java index 6705b9f5..f588e630 100644 --- a/module-examine/src/main/java/ink/wgink/module/examine/controller/api/paper/question/PaperQuestionController.java +++ b/module-examine/src/main/java/ink/wgink/module/examine/controller/api/paper/question/PaperQuestionController.java @@ -1,19 +1,20 @@ package ink.wgink.module.examine.controller.api.paper.question; import ink.wgink.common.base.DefaultBaseController; +import ink.wgink.exceptions.ParamsException; import ink.wgink.exceptions.SearchException; import ink.wgink.interfaces.consts.ISystemConstant; import ink.wgink.module.examine.pojo.dtos.paper.question.PaperQuestionDTO; +import ink.wgink.module.examine.pojo.dtos.question.QuestionDTO; import ink.wgink.module.examine.service.paper.question.IPaperQuestionService; import ink.wgink.pojo.ListPage; import ink.wgink.pojo.result.ErrorResult; +import ink.wgink.pojo.result.SuccessResult; import ink.wgink.pojo.result.SuccessResultList; +import ink.wgink.pojo.vos.IdsVO; import io.swagger.annotations.*; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; @@ -33,6 +34,20 @@ public class PaperQuestionController extends DefaultBaseController { @Autowired private IPaperQuestionService paperQuestionService; + @ApiOperation(value = "保存试题", notes = "保存试题接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "paperId", value = "试卷ID", paramType = "path"), + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @PostMapping("save/paper-id/{paperId}") + public SuccessResult save(@PathVariable("paperId") String paperId, @RequestBody IdsVO idsVO) { + if(idsVO.getIds().isEmpty()) { + throw new ParamsException("试题列表不能为空"); + } + paperQuestionService.save(paperId, idsVO.getIds()); + return new SuccessResult(); + } + @ApiOperation(value = "试卷试题列表", notes = "试卷试题列表接口") @ApiImplicitParams({ @ApiImplicitParam(name = "paperId", value = "试卷ID", paramType = "path"), @@ -61,4 +76,21 @@ public class PaperQuestionController extends DefaultBaseController { return paperQuestionService.listPage(paperId, page); } + @ApiOperation(value = "不包含试卷的试题分页列表", notes = "不包含试卷的试题分页列表接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "excludePaperId", value = "不包含的试卷ID", paramType = "path"), + @ApiImplicitParam(name = "page", value = "当前页码", paramType = "query", dataType = "int", defaultValue = "1"), + @ApiImplicitParam(name = "rows", value = "显示数量", paramType = "query", dataType = "int", defaultValue = "20"), + @ApiImplicitParam(name = "keywords", value = "关键字", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "startTime", value = "开始时间", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "String") + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("listpage-question/exclude-paper-id/{excludePaperId}") + public SuccessResultList> listPageQuestionByExcludePaperId(@PathVariable("excludePaperId") String excludePaperId, ListPage page) throws SearchException { + Map params = requestParams(); + page.setParams(params); + return paperQuestionService.listPageQuestionByExcludePaperId(excludePaperId, page); + } + } diff --git a/module-examine/src/main/java/ink/wgink/module/examine/controller/route/paper/question/PaperQuestionRouteController.java b/module-examine/src/main/java/ink/wgink/module/examine/controller/route/paper/question/PaperQuestionRouteController.java index a6b8371e..cdaeb454 100644 --- a/module-examine/src/main/java/ink/wgink/module/examine/controller/route/paper/question/PaperQuestionRouteController.java +++ b/module-examine/src/main/java/ink/wgink/module/examine/controller/route/paper/question/PaperQuestionRouteController.java @@ -25,4 +25,10 @@ public class PaperQuestionRouteController { return modelAndView; } + @GetMapping("save-select") + public ModelAndView saveSelect() { + ModelAndView modelAndView = new ModelAndView("paper/question/save-select"); + return modelAndView; + } + } diff --git a/module-examine/src/main/java/ink/wgink/module/examine/dao/paper/question/IPaperQuestionDao.java b/module-examine/src/main/java/ink/wgink/module/examine/dao/paper/question/IPaperQuestionDao.java index 1220e5f9..a760ee70 100644 --- a/module-examine/src/main/java/ink/wgink/module/examine/dao/paper/question/IPaperQuestionDao.java +++ b/module-examine/src/main/java/ink/wgink/module/examine/dao/paper/question/IPaperQuestionDao.java @@ -7,6 +7,7 @@ import ink.wgink.exceptions.UpdateException; import ink.wgink.interfaces.init.IInitBaseTable; import ink.wgink.module.examine.pojo.dtos.paper.PaperDTO; import ink.wgink.module.examine.pojo.dtos.paper.question.PaperQuestionDTO; +import ink.wgink.module.examine.pojo.dtos.question.QuestionDTO; import org.springframework.stereotype.Repository; import java.util.List; @@ -62,4 +63,13 @@ public interface IPaperQuestionDao extends IInitBaseTable { * @throws SearchException */ List list(Map params) throws SearchException; + + /** + * 试题列表 + * + * @param params + * @return + * @throws SearchException + */ + List listQuestion(Map params) throws SearchException; } diff --git a/module-examine/src/main/java/ink/wgink/module/examine/service/paper/question/IPaperQuestionService.java b/module-examine/src/main/java/ink/wgink/module/examine/service/paper/question/IPaperQuestionService.java index 83c5392e..537d7533 100644 --- a/module-examine/src/main/java/ink/wgink/module/examine/service/paper/question/IPaperQuestionService.java +++ b/module-examine/src/main/java/ink/wgink/module/examine/service/paper/question/IPaperQuestionService.java @@ -1,6 +1,7 @@ package ink.wgink.module.examine.service.paper.question; import ink.wgink.module.examine.pojo.dtos.paper.question.PaperQuestionDTO; +import ink.wgink.module.examine.pojo.dtos.question.QuestionDTO; import ink.wgink.pojo.ListPage; import ink.wgink.pojo.result.SuccessResultList; @@ -15,6 +16,14 @@ import java.util.Map; **/ public interface IPaperQuestionService { + /** + * 保存 + * + * @param paperId + * @param questionIds + */ + void save(String paperId, List questionIds); + /** * 试卷试题列表 * @@ -24,6 +33,14 @@ public interface IPaperQuestionService { */ List list(String paperId, Map params); + /** + * 试卷试题分页列表 + * + * @param page + * @return + */ + SuccessResultList> listPage(ListPage page); + /** * 试卷试题分页列表 * @@ -33,4 +50,13 @@ public interface IPaperQuestionService { */ SuccessResultList> listPage(String paperId, ListPage page); + /** + * 不包含试卷的试题分页列表 + * + * @param excludePaperId + * @param page + * @return + */ + SuccessResultList> listPageQuestionByExcludePaperId(String excludePaperId, ListPage page); + } diff --git a/module-examine/src/main/java/ink/wgink/module/examine/service/paper/question/impl/PaperQuestionServiceImpl.java b/module-examine/src/main/java/ink/wgink/module/examine/service/paper/question/impl/PaperQuestionServiceImpl.java index 274a9673..8ad97379 100644 --- a/module-examine/src/main/java/ink/wgink/module/examine/service/paper/question/impl/PaperQuestionServiceImpl.java +++ b/module-examine/src/main/java/ink/wgink/module/examine/service/paper/question/impl/PaperQuestionServiceImpl.java @@ -5,9 +5,11 @@ import com.github.pagehelper.PageInfo; import ink.wgink.common.base.DefaultBaseService; import ink.wgink.module.examine.dao.paper.question.IPaperQuestionDao; import ink.wgink.module.examine.pojo.dtos.paper.question.PaperQuestionDTO; +import ink.wgink.module.examine.pojo.dtos.question.QuestionDTO; import ink.wgink.module.examine.service.paper.question.IPaperQuestionService; import ink.wgink.pojo.ListPage; import ink.wgink.pojo.result.SuccessResultList; +import ink.wgink.util.UUIDUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -26,6 +28,18 @@ public class PaperQuestionServiceImpl extends DefaultBaseService implements IPap @Autowired private IPaperQuestionDao paperQuestionDao; + @Override + public void save(String paperId, List questionIds) { + Map params = getHashMap(8); + params.put("paperId", paperId); + params.put("questionSort", "ZZZ-000"); + for (String questionId : questionIds) { + params.put("paperQuestionId", UUIDUtil.getUUID()); + params.put("questionId", questionId); + paperQuestionDao.save(params); + } + } + @Override public List list(String paperId, Map params) { params = params == null ? getHashMap(0) : params; @@ -33,10 +47,25 @@ public class PaperQuestionServiceImpl extends DefaultBaseService implements IPap } @Override - public SuccessResultList> listPage(String paperId, ListPage page) { + public SuccessResultList> listPage(ListPage page) { PageHelper.startPage(page.getPage(), page.getRows()); List paperQuestionDTOS = paperQuestionDao.list(page.getParams()); PageInfo pageInfo = new PageInfo<>(paperQuestionDTOS); return new SuccessResultList<>(paperQuestionDTOS, pageInfo.getPageNum(), pageInfo.getTotal()); } + + @Override + public SuccessResultList> listPage(String paperId, ListPage page) { + page.getParams().put("paperId", paperId); + return listPage(page); + } + + @Override + public SuccessResultList> listPageQuestionByExcludePaperId(String excludePaperId, ListPage page) { + page.getParams().put("excludePaperId", excludePaperId); + PageHelper.startPage(page.getPage(), page.getRows()); + List questionDTOS = paperQuestionDao.listQuestion(page.getParams()); + PageInfo pageInfo = new PageInfo<>(questionDTOS); + return new SuccessResultList<>(questionDTOS, pageInfo.getPageNum(), pageInfo.getTotal()); + } } diff --git a/module-examine/src/main/resources/mybatis/mapper/paper/question/paper-question-mapper.xml b/module-examine/src/main/resources/mybatis/mapper/paper/question/paper-question-mapper.xml index 865ac786..077a5078 100644 --- a/module-examine/src/main/resources/mybatis/mapper/paper/question/paper-question-mapper.xml +++ b/module-examine/src/main/resources/mybatis/mapper/paper/question/paper-question-mapper.xml @@ -139,4 +139,89 @@ + + + \ No newline at end of file diff --git a/module-examine/src/main/resources/templates/paper/question/list.html b/module-examine/src/main/resources/templates/paper/question/list.html index f8063287..2a912f76 100644 --- a/module-examine/src/main/resources/templates/paper/question/list.html +++ b/module-examine/src/main/resources/templates/paper/question/list.html @@ -293,39 +293,12 @@ choiceType = ''; } top.dialog.open({ - url: top.restAjax.path('route/question/list-select?selectCount={selectCount}&type={type}&choiceType={choiceType}', [parseInt(selectCount - selectedCount), type, choiceType]), - title: '选择考题', + url: top.restAjax.path('route/paper/question/save-select?paperId={paperId}&selectCount={selectCount}&type={type}&choiceType={choiceType}', [paperId, parseInt(selectCount - selectedCount), type, choiceType]), + title: '选择试题', width: '75%', height: '80%', onClose: function() { - var newSelectedQuestionList = top.dialog.dialogData.newSelectedQuestionList; - if(newSelectedQuestionList.length != 0) { - var questionIds = []; - for(var i = 0, item; item = newSelectedQuestionList[i++];) { - questionIds.push(item.questionId); - } - if(questionIds.length > 0) { - top.dialog.confirm(top.dataMessage.commit, function(index) { - top.dialog.close(index); - var loadLayerIndex; - top.restAjax.post(top.restAjax.path('api/paper/question/save', []), { - paperId: paperId, - questionType: questionType, - questionIds: questionIds - }, null, function(code, data) { - top.dialog.msg('添加成功', {time: 1000}); - reloadTable(); - }, function(code, data) { - top.dialog.msg(data.msg); - }, function() { - loadLayerIndex = top.dialog.msg(top.dataMessage.committing, {icon: 16, time: 0, shade: 0.3}); - }, function() { - top.dialog.close(loadLayerIndex); - }); - }); - } - } - top.dialog.dialogData.oldSelectedQuestionList = []; + reloadTable(); } }); } else if(layEvent === 'clearSaveEvent') { diff --git a/module-examine/src/main/resources/templates/paper/question/list-select.html b/module-examine/src/main/resources/templates/paper/question/save-select.html similarity index 79% rename from module-examine/src/main/resources/templates/paper/question/list-select.html rename to module-examine/src/main/resources/templates/paper/question/save-select.html index 0264a98d..95f654d6 100644 --- a/module-examine/src/main/resources/templates/paper/question/list-select.html +++ b/module-examine/src/main/resources/templates/paper/question/save-select.html @@ -53,7 +53,7 @@ - +
@@ -77,21 +77,15 @@ var common = layui.common; var form = layui.form; var resizeTimeout = null; - var paperId = top.restAjax.params(window.location.href).paperId; - var tableUrl = 'api/paper/question/listpage/{classInfoId}'; - var oldSelectedQuestionList = top.dialog.dialogData.oldSelectedQuestionList ? top.dialog.dialogData.oldSelectedQuestionList : []; - // 清空上次选择 - top.dialog.dialogData.newSelectedQuestionList = []; - var newSelectedQuestionList = []; - var tableData = []; + var queryParams = top.restAjax.params(window.location.href); + var paperId = queryParams.paperId; + var selectCount = queryParams.selectCount; + var questionType = queryParams.questionType; + var questionChoiceType = queryParams.questionChoiceType; - // 初始化选择列表 - function initNewSelectedQuestionList() { - for(var i = 0, item; item = oldSelectedQuestionList[i++];) { - newSelectedQuestionList.push(item); - } - } - initNewSelectedQuestionList(); + var tableUrl = 'api/paper/question/listpage-question/exclude-paper-id/{paperId}?questionType={questionType}&questionChoiceType={questionChoiceType}'; + + var selectObj = {}; function getDifficulty(num) { var result = ''; @@ -107,7 +101,7 @@ table.render({ elem: '#dataTable', id: 'dataTable', - url: top.restAjax.path(tableUrl, [classInfoId]), + url: top.restAjax.path(tableUrl, [paperId, questionType, questionChoiceType]), width: admin.screen() > 1 ? '100%' : '', height: $win.height() - 60, limit: 20, @@ -138,15 +132,6 @@ return rowData; } }, - {field: 'questionTypeName', width: 140, title: '自定义试题类型', align:'center', - templet: function(row) { - var rowData = row[this.field]; - if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') { - return '-'; - } - return rowData; - } - }, {field: 'type', width: 150, title: '种类', align:'center', templet: function(row) { var rowData = row[this.field]; @@ -219,25 +204,12 @@ page: true, parseData: function(data) { for(var i = 0, item; item = data.rows[i++];) { - if(!newSelectedQuestionList) { - item.checked = false; - continue; - } - var isSelected = false; - for(var j = 0, jItem; jItem = newSelectedQuestionList[j++];) { - if(item.questionId === jItem.questionId) { - isSelected = true; - break; - } - } - if(isSelected) { + if(selectObj[item.questionId]) { item.checked = true; } else { item.checked = false; } } - tableData = data.rows; - return { 'code': 0, 'msg': '', @@ -250,7 +222,6 @@ // 重载表格 function reloadTable(currentPage) { table.reload('dataTable', { - url: top.restAjax.path(tableUrl, [classInfoId]), where: { keywords: $('#keywords').val(), startTime: $('#startTime').val(), @@ -267,68 +238,70 @@ }); } initTable(); - function isQuestionSelected(questionId) { - for(var i = 0, item; item = newSelectedQuestionList[i++];) { - if(questionId == item.questionId) { - return true; - } - } - return false; - } - function addQuestionSelected(questionItem) { - if(isQuestionSelected(questionItem.questionId)) { - return; - } - newSelectedQuestionList.push({ - questionId: questionItem.questionId, - }) - } - - function removeQuestionSelected(questionItem) { - for(var i = 0, item; item = newSelectedQuestionList[i++];) { - if(questionItem.questionId == item.questionId) { - newSelectedQuestionList.splice(--i, 1); - i--; - return; - } - } - } - - table.on('checkbox(dataTable)', function(obj) { - if(obj.type === 'all') { - if(obj.checked) { - // 添加全部 - for(var i = 0, item; item = tableData[i++];) { - addQuestionSelected(item); - } - } else { - // 删除全部 - for(var i = 0, item; item = tableData[i++];) { - removeQuestionSelected(item); - } - } - } else { - if(obj.checked) { - addQuestionSelected(obj.data); - } else { - removeQuestionSelected(obj.data); - } - } - }); - - table.on('radio(dataTable)', function(obj) { - newSelectedQuestionList.splice(0, newSelectedQuestionList.length); - addQuestionSelected(obj.data); - }); $(document).on('click', '#search', function() { reloadTable(1); }); - $(document).on('click', '#confirm', function() { - top.dialog.dialogData.newSelectedQuestionList = newSelectedQuestionList; - top.dialog.closeBox(); + + table.on('checkbox(dataTable)', function(obj) { + if(obj.type === 'one') { + if(obj.checked) { + if(selectObj.length >= selectCount) { + obj.checked = !obj.checked; + top.dialog.msg('超过最大可选数量:'+ selectCount); + return; + } + selectObj[obj.data.questionId] = obj.data; + } else { + delete selectObj[obj.data.questionId]; + } + } else { + var datas = table.cache.dataTable; + if(obj.checked) { + for(var i = 0, item; item = datas[i++];) { + if(selectObj.length >= selectCount) { + obj.checked = !obj.checked; + top.dialog.msg('超过最大可选数量:'+ selectCount); + return; + } + selectObj[item.questionId] = item; + } + } else { + for(var i = 0, item; item = datas[i++];) { + delete selectObj[item.questionId]; + } + } + } }); + $(document).on('click', '#saveBtn', function() { + var selectIdArray = []; + for(var k in selectObj) { + selectIdArray.push(k); + } + if(selectIdArray.length === 0) { + top.dialog.msg('请选择试题'); + return; + } + top.dialog.confirm('确定保存吗?', function(index) { + top.dialog.close(index); + var loadLayerIndex; + top.restAjax.post(top.restAjax.path('api/paper/question/save/paper-id/{paperId}', [paperId]), { + ids: selectIdArray + }, null, function(code, data) { + top.dialog.msg('提交成功'); + reloadTable(1); + }, function(code, data) { + top.dialog.msg(data.msg); + }, function() { + loadLayerIndex = top.dialog.msg('正在提交...', {icon: 16, time: 0, shade: 0.3}); + }, function() { + top.dialog.close(loadLayerIndex); + }); + }); + }) + + table.on('tool(dataTable)', function(obj) { var data = obj.data; var event = obj.event;