From e01fe45e8ba07da819a444ed3eb5f041ac9e507f Mon Sep 17 00:00:00 2001 From: ovo Date: Tue, 15 Apr 2025 23:47:50 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20[=E4=B8=B4=E6=97=B6=E6=8F=90=E4=BA=A4]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/constant/SecurityConstants.java | 2 + .../backend/core/utils/excel/ExportExcel.java | 110 ++-- .../backend/core/utils/excel/ImportExcel.java | 69 ++- .../model/exam/controller/ExamController.java | 15 +- .../model/exam/service/ExamService.java | 2 + .../exam/service/impl/ExamServiceImpl.java | 8 + .../paper/controller/PaperController.java | 171 ------ .../backend/model/paper/dto/PaperDTO.java | 80 --- .../model/paper/dto/PaperQuAnswerDTO.java | 48 -- .../backend/model/paper/dto/PaperQuDTO.java | 54 -- .../paper/dto/ext/PaperQuAnswerExtDTO.java | 29 - .../model/paper/dto/ext/PaperQuDetailDTO.java | 33 -- .../paper/dto/request/PaperAnswerDTO.java | 22 - .../paper/dto/request/PaperCreateReqDTO.java | 22 - .../paper/dto/request/PaperListReqDTO.java | 39 -- .../paper/dto/request/PaperQuQueryDTO.java | 21 - .../paper/dto/response/ExamDetailRespDTO.java | 39 -- .../paper/dto/response/ExamResultRespDTO.java | 19 - .../paper/dto/response/PaperListRespDTO.java | 27 - .../backend/model/paper/entity/Paper.java | 125 ---- .../backend/model/paper/entity/PaperQu.java | 80 --- .../model/paper/entity/PaperQuAnswer.java | 68 --- .../backend/model/paper/enums/ExamState.java | 33 -- .../backend/model/paper/enums/PaperState.java | 33 -- .../backend/model/paper/job/BreakExamJob.java | 45 -- .../model/paper/mapper/PaperMapper.java | 40 -- .../paper/mapper/PaperQuAnswerMapper.java | 27 - .../model/paper/mapper/PaperQuMapper.java | 42 -- .../paper/service/PaperQuAnswerService.java | 45 -- .../model/paper/service/PaperQuService.java | 71 --- .../model/paper/service/PaperService.java | 84 --- .../impl/PaperQuAnswerServiceImpl.java | 62 -- .../service/impl/PaperQuServiceImpl.java | 95 ---- .../paper/service/impl/PaperServiceImpl.java | 537 ------------------ .../model/qu/controller/QuController.java | 316 ----------- .../backend/model/qu/dto/QuAnswerDTO.java | 42 -- .../com/guwan/backend/model/qu/dto/QuDTO.java | 53 -- .../guwan/backend/model/qu/dto/QuRepoDTO.java | 38 -- .../model/qu/dto/export/QuExportDTO.java | 45 -- .../model/qu/dto/export/QuImportDTO.java | 23 - .../backend/model/qu/dto/ext/QuDetailDTO.java | 33 -- .../model/qu/dto/request/QuQueryReqDTO.java | 38 -- .../qu/dto/request/QuRepoBatchReqDTO.java | 34 -- .../com/guwan/backend/model/qu/entity/Qu.java | 75 --- .../backend/model/qu/entity/QuAnswer.java | 58 -- .../guwan/backend/model/qu/entity/QuRepo.java | 50 -- .../guwan/backend/model/qu/enums/QuType.java | 26 - .../model/qu/mapper/QuAnswerMapper.java | 16 - .../backend/model/qu/mapper/QuMapper.java | 56 -- .../backend/model/qu/mapper/QuRepoMapper.java | 16 - .../model/qu/service/QuAnswerService.java | 48 -- .../model/qu/service/QuRepoService.java | 59 -- .../backend/model/qu/service/QuService.java | 76 --- .../qu/service/impl/QuAnswerServiceImpl.java | 144 ----- .../qu/service/impl/QuRepoServiceImpl.java | 175 ------ .../model/qu/service/impl/QuServiceImpl.java | 277 --------- .../model/qu/utils/ImageCheckUtils.java | 31 - .../controller/SysConfigController.java | 70 --- .../model/sys/config/dto/SysConfigDTO.java | 39 -- .../model/sys/config/entity/SysConfig.java | 53 -- .../sys/config/mapper/SysConfigMapper.java | 16 - .../sys/config/service/SysConfigService.java | 22 - .../service/impl/SysConfigServiceImpl.java | 34 -- .../controller/SysDepartController.java | 150 ----- .../model/sys/depart/dto/SysDepartDTO.java | 42 -- .../depart/dto/request/DepartSortReqDTO.java | 28 - .../depart/dto/response/SysDepartTreeDTO.java | 28 - .../model/sys/depart/entity/SysDepart.java | 59 -- .../sys/depart/mapper/SysDepartMapper.java | 28 - .../sys/depart/service/SysDepartService.java | 62 -- .../service/impl/SysDepartServiceImpl.java | 288 ---------- .../sys/system/mapper/SysDictMapper.java | 29 - .../sys/system/service/SysDictService.java | 21 - .../service/impl/SysDictServiceImpl.java | 21 - .../user/controller/SysRoleController.java | 77 --- .../user/controller/SysUserController.java | 177 ------ .../model/sys/user/dto/SysRoleDTO.java | 30 - .../model/sys/user/dto/SysUserDTO.java | 55 -- .../model/sys/user/dto/SysUserRoleDTO.java | 33 -- .../user/dto/request/SysUserLoginReqDTO.java | 29 - .../user/dto/request/SysUserSaveReqDTO.java | 43 -- .../user/dto/request/SysUserTokenReqDTO.java | 26 - .../user/dto/response/SysUserLoginDTO.java | 55 -- .../model/sys/user/entity/SysRole.java | 36 -- .../model/sys/user/entity/SysUser.java | 83 --- .../model/sys/user/entity/SysUserRole.java | 42 -- .../model/sys/user/mapper/SysRoleMapper.java | 15 - .../model/sys/user/mapper/SysUserMapper.java | 16 - .../sys/user/mapper/SysUserRoleMapper.java | 16 - .../sys/user/service/SysRoleService.java | 25 - .../sys/user/service/SysUserRoleService.java | 61 -- .../sys/user/service/SysUserService.java | 72 --- .../user/service/impl/SysRoleServiceImpl.java | 42 -- .../service/impl/SysUserRoleServiceImpl.java | 128 ----- .../user/service/impl/SysUserServiceImpl.java | 253 --------- .../guwan/backend/model/user/UserUtils.java | 56 -- .../book/controller/UserBookController.java | 76 --- .../model/user/book/dto/UserBookDTO.java | 52 -- .../model/user/book/entity/UserBook.java | 78 --- .../user/book/mapper/UserBookMapper.java | 16 - .../user/book/service/UserBookService.java | 40 -- .../service/impl/UserBookServiceImpl.java | 155 ----- .../exam/controller/UserExamController.java | 65 --- .../model/user/exam/dto/UserExamDTO.java | 50 -- .../user/exam/dto/request/UserExamReqDTO.java | 30 - .../exam/dto/response/UserExamRespDTO.java | 29 - .../model/user/exam/entity/UserExam.java | 70 --- .../user/exam/mapper/UserExamMapper.java | 29 - .../user/exam/service/UserExamService.java | 43 -- .../service/impl/UserExamServiceImpl.java | 88 --- .../service/impl/CourseServiceImpl.java | 2 +- 111 files changed, 139 insertions(+), 6970 deletions(-) delete mode 100644 src/main/java/com/guwan/backend/model/paper/controller/PaperController.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/dto/PaperDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/dto/PaperQuAnswerDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/dto/PaperQuDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/dto/ext/PaperQuAnswerExtDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/dto/ext/PaperQuDetailDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/dto/request/PaperAnswerDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/dto/request/PaperCreateReqDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/dto/request/PaperListReqDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/dto/request/PaperQuQueryDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/dto/response/ExamDetailRespDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/dto/response/ExamResultRespDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/dto/response/PaperListRespDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/entity/Paper.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/entity/PaperQu.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/entity/PaperQuAnswer.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/enums/ExamState.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/enums/PaperState.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/job/BreakExamJob.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/mapper/PaperMapper.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/mapper/PaperQuAnswerMapper.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/mapper/PaperQuMapper.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/service/PaperQuAnswerService.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/service/PaperQuService.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/service/PaperService.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/service/impl/PaperQuAnswerServiceImpl.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/service/impl/PaperQuServiceImpl.java delete mode 100644 src/main/java/com/guwan/backend/model/paper/service/impl/PaperServiceImpl.java delete mode 100644 src/main/java/com/guwan/backend/model/qu/controller/QuController.java delete mode 100644 src/main/java/com/guwan/backend/model/qu/dto/QuAnswerDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/qu/dto/QuDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/qu/dto/QuRepoDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/qu/dto/export/QuExportDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/qu/dto/export/QuImportDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/qu/dto/ext/QuDetailDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/qu/dto/request/QuQueryReqDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/qu/dto/request/QuRepoBatchReqDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/qu/entity/Qu.java delete mode 100644 src/main/java/com/guwan/backend/model/qu/entity/QuAnswer.java delete mode 100644 src/main/java/com/guwan/backend/model/qu/entity/QuRepo.java delete mode 100644 src/main/java/com/guwan/backend/model/qu/enums/QuType.java delete mode 100644 src/main/java/com/guwan/backend/model/qu/mapper/QuAnswerMapper.java delete mode 100644 src/main/java/com/guwan/backend/model/qu/mapper/QuMapper.java delete mode 100644 src/main/java/com/guwan/backend/model/qu/mapper/QuRepoMapper.java delete mode 100644 src/main/java/com/guwan/backend/model/qu/service/QuAnswerService.java delete mode 100644 src/main/java/com/guwan/backend/model/qu/service/QuRepoService.java delete mode 100644 src/main/java/com/guwan/backend/model/qu/service/QuService.java delete mode 100644 src/main/java/com/guwan/backend/model/qu/service/impl/QuAnswerServiceImpl.java delete mode 100644 src/main/java/com/guwan/backend/model/qu/service/impl/QuRepoServiceImpl.java delete mode 100644 src/main/java/com/guwan/backend/model/qu/service/impl/QuServiceImpl.java delete mode 100644 src/main/java/com/guwan/backend/model/qu/utils/ImageCheckUtils.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/config/controller/SysConfigController.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/config/dto/SysConfigDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/config/entity/SysConfig.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/config/mapper/SysConfigMapper.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/config/service/SysConfigService.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/config/service/impl/SysConfigServiceImpl.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/depart/controller/SysDepartController.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/depart/dto/SysDepartDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/depart/dto/request/DepartSortReqDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/depart/dto/response/SysDepartTreeDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/depart/entity/SysDepart.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/depart/mapper/SysDepartMapper.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/depart/service/SysDepartService.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/depart/service/impl/SysDepartServiceImpl.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/system/mapper/SysDictMapper.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/system/service/SysDictService.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/system/service/impl/SysDictServiceImpl.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/user/controller/SysRoleController.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/user/controller/SysUserController.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/user/dto/SysRoleDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/user/dto/SysUserDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/user/dto/SysUserRoleDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/user/dto/request/SysUserLoginReqDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/user/dto/request/SysUserSaveReqDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/user/dto/request/SysUserTokenReqDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/user/dto/response/SysUserLoginDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/user/entity/SysRole.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/user/entity/SysUser.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/user/entity/SysUserRole.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/user/mapper/SysRoleMapper.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/user/mapper/SysUserMapper.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/user/mapper/SysUserRoleMapper.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/user/service/SysRoleService.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/user/service/SysUserRoleService.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/user/service/SysUserService.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/user/service/impl/SysRoleServiceImpl.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/user/service/impl/SysUserRoleServiceImpl.java delete mode 100644 src/main/java/com/guwan/backend/model/sys/user/service/impl/SysUserServiceImpl.java delete mode 100644 src/main/java/com/guwan/backend/model/user/UserUtils.java delete mode 100644 src/main/java/com/guwan/backend/model/user/book/controller/UserBookController.java delete mode 100644 src/main/java/com/guwan/backend/model/user/book/dto/UserBookDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/user/book/entity/UserBook.java delete mode 100644 src/main/java/com/guwan/backend/model/user/book/mapper/UserBookMapper.java delete mode 100644 src/main/java/com/guwan/backend/model/user/book/service/UserBookService.java delete mode 100644 src/main/java/com/guwan/backend/model/user/book/service/impl/UserBookServiceImpl.java delete mode 100644 src/main/java/com/guwan/backend/model/user/exam/controller/UserExamController.java delete mode 100644 src/main/java/com/guwan/backend/model/user/exam/dto/UserExamDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/user/exam/dto/request/UserExamReqDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/user/exam/dto/response/UserExamRespDTO.java delete mode 100644 src/main/java/com/guwan/backend/model/user/exam/entity/UserExam.java delete mode 100644 src/main/java/com/guwan/backend/model/user/exam/mapper/UserExamMapper.java delete mode 100644 src/main/java/com/guwan/backend/model/user/exam/service/UserExamService.java delete mode 100644 src/main/java/com/guwan/backend/model/user/exam/service/impl/UserExamServiceImpl.java diff --git a/src/main/java/com/guwan/backend/constant/SecurityConstants.java b/src/main/java/com/guwan/backend/constant/SecurityConstants.java index d28612b..a996a40 100644 --- a/src/main/java/com/guwan/backend/constant/SecurityConstants.java +++ b/src/main/java/com/guwan/backend/constant/SecurityConstants.java @@ -12,6 +12,8 @@ public class SecurityConstants { * 这些路径可以直接访问,不需要认证 */ public static final List WHITE_LIST = List.of( + + "/exam/api/paper/**", "/bs/**", "/api/common/**", //公共接口 "/demo/**", // 测试接口 diff --git a/src/main/java/com/guwan/backend/core/utils/excel/ExportExcel.java b/src/main/java/com/guwan/backend/core/utils/excel/ExportExcel.java index 4eeb79c..7a4ec03 100644 --- a/src/main/java/com/guwan/backend/core/utils/excel/ExportExcel.java +++ b/src/main/java/com/guwan/backend/core/utils/excel/ExportExcel.java @@ -1,6 +1,7 @@ /** * Copyright © 2015-2020 JeePlus All rights reserved. - */ + *//* + package com.guwan.backend.core.utils.excel; import com.google.common.collect.Lists; @@ -24,56 +25,72 @@ import java.lang.reflect.Method; import java.net.URLEncoder; import java.util.*; +*/ /** * 导出Excel文件(导出“XLSX”格式,支持大数据量导出 @see org.apache.poi.ss.SpreadsheetVersion) * @author jeeplus * @version 2016-04-21 - */ + *//* + public class ExportExcel { private static Logger log = LoggerFactory.getLogger(ExportExcel.class); - /** + */ +/** * 工作薄对象 - */ + *//* + private SXSSFWorkbook wb; - /** + */ +/** * 工作表对象 - */ + *//* + private Sheet sheet; - /** + */ +/** * 样式列表 - */ + *//* + private Map styles; - /** + */ +/** * 当前行号 - */ + *//* + private int rownum; - /** + */ +/** * 注解列表(Object[]{ ExcelField, Field/Method }) - */ + *//* + List annotationList = Lists.newArrayList(); - /** + */ +/** * 构造函数 * @param title 表格标题,传“空值”,表示无标题 * @param cls 实体对象,通过annotation.ExportField获取标题 - */ + *//* + public ExportExcel(String title, Class cls){ this(title, cls, 1); } - /** + */ +/** * 构造函数 * @param title 表格标题,传“空值”,表示无标题 * @param cls 实体对象,通过annotation.ExportField获取标题 * @param type 导出类型(1:导出数据;2:导出模板) * @param groups 导入分组 - */ + *//* + public ExportExcel(String title, Class cls, int type, int... groups){ // Get annotation field Field[] fs = cls.getDeclaredFields(); @@ -127,8 +144,10 @@ public class ExportExcel { Collections.sort(annotationList, new Comparator() { @Override public int compare(Object[] o1, Object[] o2) { - /*return new Integer(((ExcelField)o1[0]).sort()).compareTo( - new Integer(((ExcelField)o2[0]).sort()));*/ + */ +/*return new Integer(((ExcelField)o1[0]).sort()).compareTo( + new Integer(((ExcelField)o2[0]).sort()));*//* + return Integer.compare(((ExcelField) o1[0]).sort(), ((ExcelField) o2[0]).sort()); } }); @@ -147,11 +166,13 @@ public class ExportExcel { } initialize(title, headerList); } - /** + */ +/** * 初始化函数 * @param title 表格标题,传“空值”,表示无标题 * @param headerList 表头列表 - */ + *//* + private void initialize(String title, List headerList) { this.wb = new SXSSFWorkbook(500); this.sheet = wb.createSheet("Export"); @@ -194,11 +215,13 @@ public class ExportExcel { log.debug("Initialize success."); } - /** + */ +/** * 创建表格样式 * @param wb 工作薄对象 * @return 样式列表 - */ + *//* + private Map createStyles(Workbook wb) { Map styles = new HashMap<>(16); @@ -260,34 +283,40 @@ public class ExportExcel { return styles; } - /** + */ +/** * 添加一行 * @return 行对象 - */ + *//* + public Row addRow(){ return sheet.createRow(rownum++); } - /** + */ +/** * 添加一个单元格 * @param row 添加的行 * @param column 添加列号 * @param val 添加值 * @return 单元格对象 - */ + *//* + public Cell addCell(Row row, int column, Object val){ return this.addCell(row, column, val, 0, Class.class); } - /** + */ +/** * 添加一个单元格 * @param row 添加的行 * @param column 添加列号 * @param val 添加值 * @param align 对齐方式(1:靠左;2:居中;3:靠右) * @return 单元格对象 - */ + *//* + public Cell addCell(Row row, int column, Object val, int align, Class fieldType){ Cell cell = row.createCell(column); CellStyle style = styles.get("data"+(align>=1&&align<=3?align:"")); @@ -324,10 +353,12 @@ public class ExportExcel { return cell; } - /** + */ +/** * 添加数据(通过annotation.ExportField添加数据) * @return list 数据列表 - */ + *//* + public ExportExcel setDataList(List list){ for (E e : list){ int colunm = 0; @@ -358,19 +389,23 @@ public class ExportExcel { return this; } - /** + */ +/** * 输出数据流 * @param os 输出数据流 - */ + *//* + public ExportExcel write(OutputStream os) throws IOException{ wb.write(os); return this; } - /** + */ +/** * 输出到客户端 * @param fileName 输出文件名 - */ + *//* + public ExportExcel write(HttpServletResponse response, String fileName) throws IOException{ response.reset(); response.setHeader("Access-Control-Allow-Origin", "*"); @@ -380,12 +415,15 @@ public class ExportExcel { return this; } - /** + */ +/** * 清理临时文件 - */ + *//* + public ExportExcel dispose(){ wb.dispose(); return this; } } +*/ diff --git a/src/main/java/com/guwan/backend/core/utils/excel/ImportExcel.java b/src/main/java/com/guwan/backend/core/utils/excel/ImportExcel.java index 2285e02..8aed346 100644 --- a/src/main/java/com/guwan/backend/core/utils/excel/ImportExcel.java +++ b/src/main/java/com/guwan/backend/core/utils/excel/ImportExcel.java @@ -1,10 +1,10 @@ /** * Copyright © 2015-2020 JeePlus All rights reserved. - */ + *//* + package com.guwan.backend.core.utils.excel; import com.google.common.collect.Lists; - import com.guwan.backend.core.utils.Reflections; import com.guwan.backend.core.utils.excel.annotation.ExcelField; import org.apache.commons.lang3.StringUtils; @@ -31,53 +31,65 @@ import java.util.Comparator; import java.util.Date; import java.util.List; +*/ /** * 导入Excel文件(支持“XLS”和“XLSX”格式) * @author jeeplus * @version 2016-03-10 - */ + *//* + public class ImportExcel { private static Logger log = LoggerFactory.getLogger(ImportExcel.class); - /** + */ +/** * 工作薄对象 - */ + *//* + private Workbook wb; - /** + */ +/** * 工作表对象 - */ + *//* + private Sheet sheet; - /** + */ +/** * 标题行号 - */ + *//* + private int headerNum; - /** + */ +/** * 构造函数 * @param multipartFile 导入文件对象 * @param headerNum 标题行号,数据行号=标题行号+1 * @param sheetIndex 工作表编号 * @throws InvalidFormatException * @throws IOException - */ + *//* + public ImportExcel(MultipartFile multipartFile, int headerNum, int sheetIndex) throws InvalidFormatException, IOException { this(multipartFile.getOriginalFilename(), multipartFile.getInputStream(), headerNum, sheetIndex); } - /** + */ +/** * 构造函数 * @param is 导入文件对象 * @param headerNum 标题行号,数据行号=标题行号+1 * @param sheetIndex 工作表编号 * @throws InvalidFormatException * @throws IOException - */ + *//* + public ImportExcel(String fileName, InputStream is, int headerNum, int sheetIndex) throws IOException { if (StringUtils.isBlank(fileName)){ @@ -97,38 +109,46 @@ public class ImportExcel { log.debug("Initialize success."); } - /** + */ +/** * 获取行对象 * @param rownum * @return - */ + *//* + public Row getRow(int rownum){ return this.sheet.getRow(rownum); } - /** + */ +/** * 获取数据行号 * @return - */ + *//* + public int getDataRowNum(){ return headerNum+1; } - /** + */ +/** * 获取最后一个数据行号 * @return - */ + *//* + public int getLastDataRowNum(){ return this.sheet.getLastRowNum()+headerNum; } - /** + */ +/** * 获取单元格值 * @param row 获取的行 * @param column 获取单元格列号 * @return 单元格值 - */ + *//* + public Object getCellValue(Row row, int column) { Object val = ""; try { @@ -163,11 +183,13 @@ public class ImportExcel { return val; } - /** + */ +/** * 获取导入数据列表 * @param cls 导入对象类型 * @param groups 导入分组 - */ + *//* + public List getDataList(Class cls, int... groups) throws InstantiationException, IllegalAccessException{ List annotationList = Lists.newArrayList(); // Get annotation field @@ -303,3 +325,4 @@ public class ImportExcel { } } +*/ diff --git a/src/main/java/com/guwan/backend/model/exam/controller/ExamController.java b/src/main/java/com/guwan/backend/model/exam/controller/ExamController.java index 70506eb..70b25a7 100644 --- a/src/main/java/com/guwan/backend/model/exam/controller/ExamController.java +++ b/src/main/java/com/guwan/backend/model/exam/controller/ExamController.java @@ -20,10 +20,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; //import org.apache.shiro.authz.annotation.RequiresRoles; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -37,11 +34,11 @@ import java.util.Date; */ @Api(tags={"考试"}) @RestController -@RequestMapping("/api/common/exam/api/exam/exam") +@RequestMapping("/api/common/exam") public class ExamController extends BaseController { @Autowired - private ExamService baseService; + private ExamService examService; /** @@ -50,11 +47,11 @@ public class ExamController extends BaseController { * @return */ @ApiOperation(value = "考试视角") - @RequestMapping(value = "/online-paging", method = { RequestMethod.POST}) + @PostMapping(value = "/online-paging") public ApiRest> myPaging(@RequestBody PagingReqDTO reqDTO) { //分页查询并转换 - IPage page = baseService.onlinePaging(reqDTO); + IPage page = examService.onlinePaging(reqDTO); return super.success(page); } @@ -62,7 +59,7 @@ public class ExamController extends BaseController { @ApiOperation(value = "查找详情") @RequestMapping(value = "/detail", method = { RequestMethod.POST}) public ApiRest find(@RequestBody BaseIdReqDTO reqDTO) { - ExamSaveReqDTO dto = baseService.findDetail(reqDTO.getId()); + ExamSaveReqDTO dto = examService.findDetail(reqDTO.getId()); return super.success(dto); } diff --git a/src/main/java/com/guwan/backend/model/exam/service/ExamService.java b/src/main/java/com/guwan/backend/model/exam/service/ExamService.java index 4787383..8967a7a 100644 --- a/src/main/java/com/guwan/backend/model/exam/service/ExamService.java +++ b/src/main/java/com/guwan/backend/model/exam/service/ExamService.java @@ -31,4 +31,6 @@ public interface ExamService extends IService { ExamSaveReqDTO findDetail(String id); + ExamDTO findById(String id); + } diff --git a/src/main/java/com/guwan/backend/model/exam/service/impl/ExamServiceImpl.java b/src/main/java/com/guwan/backend/model/exam/service/impl/ExamServiceImpl.java index 7cf009c..5c9a4e6 100644 --- a/src/main/java/com/guwan/backend/model/exam/service/impl/ExamServiceImpl.java +++ b/src/main/java/com/guwan/backend/model/exam/service/impl/ExamServiceImpl.java @@ -73,5 +73,13 @@ public class ExamServiceImpl extends ServiceImpl implements Ex return respDTO; } + @Override + public ExamDTO findById(String id) { + ExamDTO respDTO = new ExamDTO(); + Exam exam = this.getById(id); + BeanMapper.copy(exam, respDTO); + return respDTO; + } + } diff --git a/src/main/java/com/guwan/backend/model/paper/controller/PaperController.java b/src/main/java/com/guwan/backend/model/paper/controller/PaperController.java deleted file mode 100644 index dcd07f4..0000000 --- a/src/main/java/com/guwan/backend/model/paper/controller/PaperController.java +++ /dev/null @@ -1,171 +0,0 @@ -package com.guwan.backend.model.paper.controller; - -import com.baomidou.mybatisplus.core.metadata.IPage; - -import com.guwan.backend.core.api.ApiRest; -import com.guwan.backend.core.api.controller.BaseController; -import com.guwan.backend.core.api.dto.BaseIdReqDTO; -import com.guwan.backend.core.api.dto.BaseIdRespDTO; -import com.guwan.backend.core.api.dto.PagingReqDTO; -import com.guwan.backend.model.paper.dto.PaperDTO; -import com.guwan.backend.model.paper.dto.ext.PaperQuDetailDTO; -import com.guwan.backend.model.paper.dto.request.PaperAnswerDTO; -import com.guwan.backend.model.paper.dto.request.PaperCreateReqDTO; -import com.guwan.backend.model.paper.dto.request.PaperListReqDTO; -import com.guwan.backend.model.paper.dto.request.PaperQuQueryDTO; -import com.guwan.backend.model.paper.dto.response.ExamDetailRespDTO; -import com.guwan.backend.model.paper.dto.response.ExamResultRespDTO; -import com.guwan.backend.model.paper.dto.response.PaperListRespDTO; -import com.guwan.backend.model.paper.service.PaperService; -import com.guwan.backend.model.user.UserUtils; -import com.guwan.backend.security.CustomUserDetails; -import com.guwan.backend.util.JwtUtil; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -/** -*

-* 试卷控制器 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 16:33 -*/ -@Api(tags={"试卷"}) -@RestController -@RequestMapping("/exam/api/paper/paper") -public class PaperController extends BaseController { - - @Autowired - private PaperService baseService; - - @Autowired - private JwtUtil jwtUtil; - - /** - * 分页查找 - * @param reqDTO - * @return - */ - @ApiOperation(value = "分页查找") - @RequestMapping(value = "/paging", method = { RequestMethod.POST}) - public ApiRest> paging(@RequestBody PagingReqDTO reqDTO) { - //分页查询并转换 - IPage page = baseService.paging(reqDTO); - return super.success(page); - } - - - - /** - * 创建试卷 - * @param reqDTO - * @return - */ - @ApiOperation(value = "创建试卷") - @RequestMapping(value = "/create-paper", method = { RequestMethod.POST}) - public ApiRest save(@RequestBody PaperCreateReqDTO reqDTO) { - - - Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - if (authentication != null && authentication.getPrincipal() instanceof CustomUserDetails userDetails) { - // sysLog.setUserId(userDetails.getUserId()); - // sysLog.setUsername(userDetails.getUsername()); - } - - - //复制参数 - // String paperId = baseService.createPaper(UserUtils.getUserId(), reqDTO.getExamId()); - String paperId = baseService.createPaper(jwtUtil.getUserIdFromToken("111") + "", - reqDTO.getExamId()); - - return super.success(new BaseIdRespDTO(paperId)); - } - - /** - * 批量删除 - * @param reqDTO - * @return - */ - @ApiOperation(value = "试卷详情") - @RequestMapping(value = "/paper-detail", method = { RequestMethod.POST}) - public ApiRest paperDetail(@RequestBody BaseIdReqDTO reqDTO) { - //根据ID删除 - ExamDetailRespDTO respDTO = baseService.paperDetail(reqDTO.getId()); - return super.success(respDTO); - } - - /** - * 批量删除 - * @param reqDTO - * @return - */ - @ApiOperation(value = "试题详情") - @RequestMapping(value = "/qu-detail", method = { RequestMethod.POST}) - public ApiRest quDetail(@RequestBody PaperQuQueryDTO reqDTO) { - //根据ID删除 - PaperQuDetailDTO respDTO = baseService.findQuDetail(reqDTO.getPaperId(), reqDTO.getQuId()); - return super.success(respDTO); - } - - /** - * 填充答案 - * @param reqDTO - * @return - */ - @ApiOperation(value = "填充答案") - @RequestMapping(value = "/fill-answer", method = { RequestMethod.POST}) - public ApiRest fillAnswer(@RequestBody PaperAnswerDTO reqDTO) { - //根据ID删除 - baseService.fillAnswer(reqDTO); - return super.success(); - } - - - /** - * 交卷操作 - * @param reqDTO - * @return - */ - @ApiOperation(value = "交卷操作") - @RequestMapping(value = "/hand-exam", method = { RequestMethod.POST}) - public ApiRest handleExam(@RequestBody BaseIdReqDTO reqDTO) { - //根据ID删除 - baseService.handExam(reqDTO.getId()); - return super.success(); - } - - - /** - * 批量删除 - * @param reqDTO - * @return - */ - @ApiOperation(value = "试卷详情") - @RequestMapping(value = "/paper-result", method = { RequestMethod.POST}) - public ApiRest paperResult(@RequestBody BaseIdReqDTO reqDTO) { - //根据ID删除 - ExamResultRespDTO respDTO = baseService.paperResult(reqDTO.getId()); - return super.success(respDTO); - } - - - /** - * 检测用户有没有中断的考试 - * @return - */ - @ApiOperation(value = "检测进行中的考试") - @RequestMapping(value = "/check-process", method = { RequestMethod.POST}) - public ApiRest checkProcess() { - //复制参数 - PaperDTO dto = baseService.checkProcess(UserUtils.getUserId()); - return super.success(dto); - } -} diff --git a/src/main/java/com/guwan/backend/model/paper/dto/PaperDTO.java b/src/main/java/com/guwan/backend/model/paper/dto/PaperDTO.java deleted file mode 100644 index 62ebd7d..0000000 --- a/src/main/java/com/guwan/backend/model/paper/dto/PaperDTO.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.guwan.backend.model.paper.dto; - - -import com.guwan.backend.core.annon.Dict; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; -import java.util.Date; - -/** -*

-* 试卷请求类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 17:31 -*/ -@Data -@ApiModel(value="试卷", description="试卷") -public class PaperDTO implements Serializable { - - private static final long serialVersionUID = 1L; - - - @ApiModelProperty(value = "试卷ID", required=true) - private String id; - - @Dict(dictTable = "sys_user", dicText = "real_name", dicCode = "id") - @ApiModelProperty(value = "用户ID", required=true) - private String userId; - - @Dict(dictTable = "sys_depart", dicText = "dept_name", dicCode = "id") - @ApiModelProperty(value = "部门ID", required=true) - private String departId; - - @ApiModelProperty(value = "规则ID", required=true) - private String examId; - - @ApiModelProperty(value = "考试标题", required=true) - private String title; - - @ApiModelProperty(value = "考试时长", required=true) - private Integer totalTime; - - @ApiModelProperty(value = "用户时长", required=true) - private Integer userTime; - - @ApiModelProperty(value = "试卷总分", required=true) - private Integer totalScore; - - @ApiModelProperty(value = "及格分", required=true) - private Integer qualifyScore; - - @ApiModelProperty(value = "客观分", required=true) - private Integer objScore; - - @ApiModelProperty(value = "主观分", required=true) - private Integer subjScore; - - @ApiModelProperty(value = "用户得分", required=true) - private Integer userScore; - - @ApiModelProperty(value = "是否包含简答题", required=true) - private Boolean hasSaq; - - @ApiModelProperty(value = "试卷状态", required=true) - private Integer state; - - @ApiModelProperty(value = "创建时间", required=true) - private Date createTime; - - @ApiModelProperty(value = "更新时间", required=true) - private Date updateTime; - - @ApiModelProperty(value = "截止时间") - private Date limitTime; - -} diff --git a/src/main/java/com/guwan/backend/model/paper/dto/PaperQuAnswerDTO.java b/src/main/java/com/guwan/backend/model/paper/dto/PaperQuAnswerDTO.java deleted file mode 100644 index 24a0340..0000000 --- a/src/main/java/com/guwan/backend/model/paper/dto/PaperQuAnswerDTO.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.guwan.backend.model.paper.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; - -/** -*

-* 试卷考题备选答案请求类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 17:31 -*/ -@Data -@ApiModel(value="试卷考题备选答案", description="试卷考题备选答案") -public class PaperQuAnswerDTO implements Serializable { - - private static final long serialVersionUID = 1L; - - - @ApiModelProperty(value = "自增ID", required=true) - private String id; - - @ApiModelProperty(value = "试卷ID", required=true) - private String paperId; - - @ApiModelProperty(value = "回答项ID", required=true) - private String answerId; - - @ApiModelProperty(value = "题目ID", required=true) - private String quId; - - @ApiModelProperty(value = "是否正确项", required=true) - private Boolean isRight; - - @ApiModelProperty(value = "是否选中", required=true) - private Boolean checked; - - @ApiModelProperty(value = "排序", required=true) - private Integer sort; - - @ApiModelProperty(value = "选项标签", required=true) - private String abc; - -} diff --git a/src/main/java/com/guwan/backend/model/paper/dto/PaperQuDTO.java b/src/main/java/com/guwan/backend/model/paper/dto/PaperQuDTO.java deleted file mode 100644 index 993855c..0000000 --- a/src/main/java/com/guwan/backend/model/paper/dto/PaperQuDTO.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.guwan.backend.model.paper.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; - -/** -*

-* 试卷考题请求类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 17:31 -*/ -@Data -@ApiModel(value="试卷考题", description="试卷考题") -public class PaperQuDTO implements Serializable { - - private static final long serialVersionUID = 1L; - - - @ApiModelProperty(value = "ID", required=true) - private String id; - - @ApiModelProperty(value = "试卷ID", required=true) - private String paperId; - - @ApiModelProperty(value = "题目ID", required=true) - private String quId; - - @ApiModelProperty(value = "题目类型", required=true) - private Integer quType; - - @ApiModelProperty(value = "是否已答", required=true) - private Boolean answered; - - @ApiModelProperty(value = "主观答案", required=true) - private String answer; - - @ApiModelProperty(value = "问题排序", required=true) - private Integer sort; - - @ApiModelProperty(value = "单题分分值", required=true) - private Integer score; - - @ApiModelProperty(value = "实际得分(主观题)", required=true) - private Integer actualScore; - - @ApiModelProperty(value = "是否答对", required=true) - private Boolean isRight; - -} diff --git a/src/main/java/com/guwan/backend/model/paper/dto/ext/PaperQuAnswerExtDTO.java b/src/main/java/com/guwan/backend/model/paper/dto/ext/PaperQuAnswerExtDTO.java deleted file mode 100644 index f283b40..0000000 --- a/src/main/java/com/guwan/backend/model/paper/dto/ext/PaperQuAnswerExtDTO.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.guwan.backend.model.paper.dto.ext; - - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** -*

-* 试卷考题备选答案请求类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 17:31 -*/ -@Data -@ApiModel(value="试卷考题备选答案", description="试卷考题备选答案") -public class PaperQuAnswerExtDTO extends PaperQuAnswerDTO { - - private static final long serialVersionUID = 1L; - - @ApiModelProperty(value = "试题图片", required=true) - private String image; - - @ApiModelProperty(value = "答案内容", required=true) - private String content; - - -} diff --git a/src/main/java/com/guwan/backend/model/paper/dto/ext/PaperQuDetailDTO.java b/src/main/java/com/guwan/backend/model/paper/dto/ext/PaperQuDetailDTO.java deleted file mode 100644 index 2d8c854..0000000 --- a/src/main/java/com/guwan/backend/model/paper/dto/ext/PaperQuDetailDTO.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.guwan.backend.model.paper.dto.ext; - - -import com.guwan.backend.model.paper.dto.PaperQuDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** -*

-* 试卷考题请求类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 17:31 -*/ -@Data -@ApiModel(value="试卷题目详情类", description="试卷题目详情类") -public class PaperQuDetailDTO extends PaperQuDTO { - - private static final long serialVersionUID = 1L; - - @ApiModelProperty(value = "图片", required=true) - private String image; - - @ApiModelProperty(value = "题目内容", required=true) - private String content; - - @ApiModelProperty(value = "答案内容", required=true) - List answerList; -} diff --git a/src/main/java/com/guwan/backend/model/paper/dto/request/PaperAnswerDTO.java b/src/main/java/com/guwan/backend/model/paper/dto/request/PaperAnswerDTO.java deleted file mode 100644 index 01f9f97..0000000 --- a/src/main/java/com/guwan/backend/model/paper/dto/request/PaperAnswerDTO.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.guwan.backend.model.paper.dto.request; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** - * @author bool - */ -@Data -@ApiModel(value="查找试卷题目详情请求类", description="查找试卷题目详情请求类") -public class PaperAnswerDTO extends PaperQuQueryDTO { - - @ApiModelProperty(value = "回答列表", required=true) - private List answers; - - @ApiModelProperty(value = "主观答案", required=true) - private String answer; - -} diff --git a/src/main/java/com/guwan/backend/model/paper/dto/request/PaperCreateReqDTO.java b/src/main/java/com/guwan/backend/model/paper/dto/request/PaperCreateReqDTO.java deleted file mode 100644 index b54ab9d..0000000 --- a/src/main/java/com/guwan/backend/model/paper/dto/request/PaperCreateReqDTO.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.guwan.backend.model.paper.dto.request; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.yf.exam.core.api.dto.BaseDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author bool - */ -@Data -@ApiModel(value="试卷创建请求类", description="试卷创建请求类") -public class PaperCreateReqDTO extends BaseDTO { - - @JsonIgnore - private String userId; - - @ApiModelProperty(value = "考试ID", required=true) - private String examId; - -} diff --git a/src/main/java/com/guwan/backend/model/paper/dto/request/PaperListReqDTO.java b/src/main/java/com/guwan/backend/model/paper/dto/request/PaperListReqDTO.java deleted file mode 100644 index f2544c7..0000000 --- a/src/main/java/com/guwan/backend/model/paper/dto/request/PaperListReqDTO.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.guwan.backend.model.paper.dto.request; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; - -/** -*

-* 试卷请求类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 17:31 -*/ -@Data -@ApiModel(value="试卷", description="试卷") -public class PaperListReqDTO implements Serializable { - - private static final long serialVersionUID = 1L; - - @ApiModelProperty(value = "用户ID", required=true) - private String userId; - - @ApiModelProperty(value = "部门ID", required=true) - private String departId; - - @ApiModelProperty(value = "规则ID", required=true) - private String examId; - - @ApiModelProperty(value = "用户昵称", required=true) - private String realName; - - @ApiModelProperty(value = "试卷状态", required=true) - private Integer state; - - -} diff --git a/src/main/java/com/guwan/backend/model/paper/dto/request/PaperQuQueryDTO.java b/src/main/java/com/guwan/backend/model/paper/dto/request/PaperQuQueryDTO.java deleted file mode 100644 index 8d72e18..0000000 --- a/src/main/java/com/guwan/backend/model/paper/dto/request/PaperQuQueryDTO.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.guwan.backend.model.paper.dto.request; - -import com.yf.exam.core.api.dto.BaseDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author bool - */ -@Data -@ApiModel(value="查找试卷题目详情请求类", description="查找试卷题目详情请求类") -public class PaperQuQueryDTO extends BaseDTO { - - @ApiModelProperty(value = "试卷ID", required=true) - private String paperId; - - @ApiModelProperty(value = "题目ID", required=true) - private String quId; - -} diff --git a/src/main/java/com/guwan/backend/model/paper/dto/response/ExamDetailRespDTO.java b/src/main/java/com/guwan/backend/model/paper/dto/response/ExamDetailRespDTO.java deleted file mode 100644 index f9171f8..0000000 --- a/src/main/java/com/guwan/backend/model/paper/dto/response/ExamDetailRespDTO.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.guwan.backend.model.paper.dto.response; - - -import com.guwan.backend.model.paper.dto.PaperDTO; -import com.guwan.backend.model.paper.dto.PaperQuDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Calendar; -import java.util.List; - -@Data -@ApiModel(value="考试详情", description="考试详情") -public class ExamDetailRespDTO extends PaperDTO { - - - @ApiModelProperty(value = "单选题列表", required=true) - private List radioList; - - @ApiModelProperty(value = "多选题列表", required=true) - private List multiList; - - @ApiModelProperty(value = "判断题", required=true) - private List judgeList; - - - @ApiModelProperty(value = "剩余结束秒数", required=true) - public Long getLeftSeconds(){ - - // 结束时间 - Calendar cl = Calendar.getInstance(); - cl.setTime(this.getCreateTime()); - cl.add(Calendar.MINUTE, getTotalTime()); - - return (cl.getTimeInMillis() - System.currentTimeMillis()) / 1000; - } - -} diff --git a/src/main/java/com/guwan/backend/model/paper/dto/response/ExamResultRespDTO.java b/src/main/java/com/guwan/backend/model/paper/dto/response/ExamResultRespDTO.java deleted file mode 100644 index f715cdd..0000000 --- a/src/main/java/com/guwan/backend/model/paper/dto/response/ExamResultRespDTO.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.guwan.backend.model.paper.dto.response; - - -import com.guwan.backend.model.paper.dto.PaperDTO; -import com.guwan.backend.model.paper.dto.ext.PaperQuDetailDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -@Data -@ApiModel(value="考试结果展示响应类", description="考试结果展示响应类") -public class ExamResultRespDTO extends PaperDTO { - - @ApiModelProperty(value = "问题列表", required=true) - private List quList; - -} diff --git a/src/main/java/com/guwan/backend/model/paper/dto/response/PaperListRespDTO.java b/src/main/java/com/guwan/backend/model/paper/dto/response/PaperListRespDTO.java deleted file mode 100644 index b163a2c..0000000 --- a/src/main/java/com/guwan/backend/model/paper/dto/response/PaperListRespDTO.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.guwan.backend.model.paper.dto.response; - - -import com.guwan.backend.model.paper.dto.PaperDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** -*

-* 试卷请求类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 17:31 -*/ -@Data -@ApiModel(value="试卷列表响应类", description="试卷列表响应类") -public class PaperListRespDTO extends PaperDTO { - - private static final long serialVersionUID = 1L; - - @ApiModelProperty(value = "人员", required=true) - private String realName; - - -} diff --git a/src/main/java/com/guwan/backend/model/paper/entity/Paper.java b/src/main/java/com/guwan/backend/model/paper/entity/Paper.java deleted file mode 100644 index 9839bd2..0000000 --- a/src/main/java/com/guwan/backend/model/paper/entity/Paper.java +++ /dev/null @@ -1,125 +0,0 @@ -package com.guwan.backend.model.paper.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.extension.activerecord.Model; -import lombok.Data; - -import java.util.Date; - -/** -*

-* 试卷实体类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 17:31 -*/ -@Data -@TableName("el_paper") -public class Paper extends Model { - - private static final long serialVersionUID = 1L; - - /** - * 试卷ID - */ - @TableId(value = "id", type = IdType.ASSIGN_ID) - private String id; - - /** - * 用户ID - */ - @TableField("user_id") - private String userId; - - /** - * 部门ID - */ - @TableField("depart_id") - private String departId; - - /** - * 规则ID - */ - @TableField("exam_id") - private String examId; - - /** - * 考试标题 - */ - private String title; - - /** - * 考试时长 - */ - @TableField("total_time") - private Integer totalTime; - - /** - * 用户时长 - */ - @TableField("user_time") - private Integer userTime; - - /** - * 试卷总分 - */ - @TableField("total_score") - private Integer totalScore; - - /** - * 及格分 - */ - @TableField("qualify_score") - private Integer qualifyScore; - - /** - * 客观分 - */ - @TableField("obj_score") - private Integer objScore; - - /** - * 主观分 - */ - @TableField("subj_score") - private Integer subjScore; - - /** - * 用户得分 - */ - @TableField("user_score") - private Integer userScore; - - /** - * 是否包含简答题 - */ - @TableField("has_saq") - private Boolean hasSaq; - - /** - * 试卷状态 - */ - private Integer state; - - /** - * 创建时间 - */ - @TableField("create_time") - private Date createTime; - - /** - * 更新时间 - */ - @TableField("update_time") - private Date updateTime; - - /** - * 截止时间 - */ - @TableField("limit_time") - private Date limitTime; -} diff --git a/src/main/java/com/guwan/backend/model/paper/entity/PaperQu.java b/src/main/java/com/guwan/backend/model/paper/entity/PaperQu.java deleted file mode 100644 index b89799d..0000000 --- a/src/main/java/com/guwan/backend/model/paper/entity/PaperQu.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.guwan.backend.model.paper.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.extension.activerecord.Model; -import lombok.Data; - -/** -*

-* 试卷考题实体类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 17:31 -*/ -@Data -@TableName("el_paper_qu") -public class PaperQu extends Model { - - private static final long serialVersionUID = 1L; - - /** - * ID - */ - @TableId(value = "id", type = IdType.ASSIGN_ID) - private String id; - - /** - * 试卷ID - */ - @TableField("paper_id") - private String paperId; - - /** - * 题目ID - */ - @TableField("qu_id") - private String quId; - - /** - * 题目类型 - */ - @TableField("qu_type") - private Integer quType; - - /** - * 是否已答 - */ - private Boolean answered; - - /** - * 主观答案 - */ - private String answer; - - /** - * 问题排序 - */ - private Integer sort; - - /** - * 单题分分值 - */ - private Integer score; - - /** - * 实际得分(主观题) - */ - @TableField("actual_score") - private Integer actualScore; - - /** - * 是否答对 - */ - @TableField("is_right") - private Boolean isRight; - -} diff --git a/src/main/java/com/guwan/backend/model/paper/entity/PaperQuAnswer.java b/src/main/java/com/guwan/backend/model/paper/entity/PaperQuAnswer.java deleted file mode 100644 index 7fc66d3..0000000 --- a/src/main/java/com/guwan/backend/model/paper/entity/PaperQuAnswer.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.guwan.backend.model.paper.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.extension.activerecord.Model; -import lombok.Data; - -/** -*

-* 试卷考题备选答案实体类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 17:31 -*/ -@Data -@TableName("el_paper_qu_answer") -public class PaperQuAnswer extends Model { - - - /** - * 自增ID - */ - @TableId(value = "id", type = IdType.ASSIGN_ID) - private String id; - - /** - * 试卷ID - */ - @TableField("paper_id") - private String paperId; - - /** - * 回答项ID - */ - @TableField("answer_id") - private String answerId; - - /** - * 题目ID - */ - @TableField("qu_id") - private String quId; - - /** - * 是否正确项 - */ - @TableField("is_right") - private Boolean isRight; - - /** - * 是否选中 - */ - private Boolean checked; - - /** - * 排序 - */ - private Integer sort; - - /** - * 选项标签 - */ - private String abc; - -} diff --git a/src/main/java/com/guwan/backend/model/paper/enums/ExamState.java b/src/main/java/com/guwan/backend/model/paper/enums/ExamState.java deleted file mode 100644 index 50f31d7..0000000 --- a/src/main/java/com/guwan/backend/model/paper/enums/ExamState.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.guwan.backend.model.paper.enums; - - -/** - * 考试状态 - * @author bool - * @date 2019-10-30 13:11 - */ -public interface ExamState { - - - /** - * 考试中 - */ - Integer ENABLE = 0; - - /** - * 待阅卷 - */ - Integer DISABLED = 1; - - /** - * 已完成 - */ - Integer READY_START = 2; - - /** - * 已结束 - */ - Integer OVERDUE = 3; - - -} diff --git a/src/main/java/com/guwan/backend/model/paper/enums/PaperState.java b/src/main/java/com/guwan/backend/model/paper/enums/PaperState.java deleted file mode 100644 index 08c0295..0000000 --- a/src/main/java/com/guwan/backend/model/paper/enums/PaperState.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.guwan.backend.model.paper.enums; - - -/** - * 试卷状态 - * @author bool - * @date 2019-10-30 13:11 - */ -public interface PaperState { - - - /** - * 考试中 - */ - Integer ING = 0; - - /** - * 待阅卷 - */ - Integer WAIT_OPT = 1; - - /** - * 已完成 - */ - Integer FINISHED = 2; - - /** - * 弃考 - */ - Integer BREAK = 3; - - -} diff --git a/src/main/java/com/guwan/backend/model/paper/job/BreakExamJob.java b/src/main/java/com/guwan/backend/model/paper/job/BreakExamJob.java deleted file mode 100644 index fad9698..0000000 --- a/src/main/java/com/guwan/backend/model/paper/job/BreakExamJob.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.guwan.backend.model.paper.job; - -import com.yf.exam.ability.job.service.JobService; -import com.yf.exam.modules.paper.service.PaperService; -import lombok.extern.log4j.Log4j2; -import org.quartz.Job; -import org.quartz.JobDetail; -import org.quartz.JobExecutionContext; -import org.quartz.JobExecutionException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -/** - * 超时自动交卷任务 - * @author bool - */ -@Log4j2 -@Component -public class BreakExamJob implements Job { - - @Autowired - private PaperService paperService; - - @Override - public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { - - JobDetail detail = jobExecutionContext.getJobDetail(); - String name = detail.getKey().getName(); - String group = detail.getKey().getGroup(); - String data = String.valueOf(detail.getJobDataMap().get(JobService.TASK_DATA)); - - log.info("++++++++++定时任务:处理到期的交卷"); - log.info("++++++++++jobName:{}", name); - log.info("++++++++++jobGroup:{}", group); - log.info("++++++++++taskData:{}", data); - - - // 强制交卷 - paperService.handExam(data); - - } - - - -} diff --git a/src/main/java/com/guwan/backend/model/paper/mapper/PaperMapper.java b/src/main/java/com/guwan/backend/model/paper/mapper/PaperMapper.java deleted file mode 100644 index cf9537e..0000000 --- a/src/main/java/com/guwan/backend/model/paper/mapper/PaperMapper.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.guwan.backend.model.paper.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; - -import com.guwan.backend.model.paper.dto.PaperDTO; -import com.guwan.backend.model.paper.dto.request.PaperListReqDTO; -import com.guwan.backend.model.paper.dto.response.PaperListRespDTO; -import com.guwan.backend.model.paper.entity.Paper; -import org.apache.ibatis.annotations.Param; - -import java.util.List; - -/** -*

-* 试卷Mapper -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 16:33 -*/ -public interface PaperMapper extends BaseMapper { - - /** - * 查找试卷分页 - * @param page - * @param query - * @return - */ - IPage paging(Page page, @Param("query") PaperListReqDTO query); - - - /** - * 试卷列表响应类 - * @param query - * @return - */ - List list(@Param("query") PaperDTO query); -} diff --git a/src/main/java/com/guwan/backend/model/paper/mapper/PaperQuAnswerMapper.java b/src/main/java/com/guwan/backend/model/paper/mapper/PaperQuAnswerMapper.java deleted file mode 100644 index abefa48..0000000 --- a/src/main/java/com/guwan/backend/model/paper/mapper/PaperQuAnswerMapper.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.guwan.backend.model.paper.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.guwan.backend.model.paper.dto.ext.PaperQuAnswerExtDTO; -import com.guwan.backend.model.paper.entity.PaperQuAnswer; -import org.apache.ibatis.annotations.Param; - -import java.util.List; - -/** -*

-* 试卷考题备选答案Mapper -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 16:33 -*/ -public interface PaperQuAnswerMapper extends BaseMapper { - - /** - * 查找试卷试题答案列表 - * @param paperId - * @param quId - * @return - */ - List list(@Param("paperId") String paperId, @Param("quId") String quId); -} diff --git a/src/main/java/com/guwan/backend/model/paper/mapper/PaperQuMapper.java b/src/main/java/com/guwan/backend/model/paper/mapper/PaperQuMapper.java deleted file mode 100644 index c8b183a..0000000 --- a/src/main/java/com/guwan/backend/model/paper/mapper/PaperQuMapper.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.guwan.backend.model.paper.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.guwan.backend.model.paper.dto.ext.PaperQuDetailDTO; -import com.guwan.backend.model.paper.entity.PaperQu; -import org.apache.ibatis.annotations.Param; - -import java.util.List; - -/** -*

-* 试卷考题Mapper -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 16:33 -*/ -public interface PaperQuMapper extends BaseMapper { - - /** - * 统计客观分 - * @param paperId - * @return - */ - int sumObjective(@Param("paperId") String paperId); - - /** - * 统计主观分 - * @param paperId - * @return - */ - int sumSubjective(@Param("paperId") String paperId); - - /** - * 找出全部试题列表 - * @param paperId - * @return - */ - List listByPaper(@Param("paperId") String paperId); -} - - diff --git a/src/main/java/com/guwan/backend/model/paper/service/PaperQuAnswerService.java b/src/main/java/com/guwan/backend/model/paper/service/PaperQuAnswerService.java deleted file mode 100644 index d9f00f6..0000000 --- a/src/main/java/com/guwan/backend/model/paper/service/PaperQuAnswerService.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.guwan.backend.model.paper.service; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.service.IService; -import com.guwan.backend.core.api.dto.PagingReqDTO; -import com.guwan.backend.model.paper.dto.PaperQuAnswerDTO; -import com.guwan.backend.model.paper.dto.ext.PaperQuAnswerExtDTO; -import com.guwan.backend.model.paper.entity.PaperQuAnswer; - - -import java.util.List; - -/** -*

-* 试卷考题备选答案业务类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 16:33 -*/ -public interface PaperQuAnswerService extends IService { - - /** - * 分页查询数据 - * @param reqDTO - * @return - */ - IPage paging(PagingReqDTO reqDTO); - - /** - * 查找试卷试题答案列表 - * @param paperId - * @param quId - * @return - */ - List listForExam(String paperId, String quId); - - /** - * 查找答案列表,用来填充 - * @param paperId - * @param quId - * @return - */ - List listForFill(String paperId, String quId); -} diff --git a/src/main/java/com/guwan/backend/model/paper/service/PaperQuService.java b/src/main/java/com/guwan/backend/model/paper/service/PaperQuService.java deleted file mode 100644 index 4bc3097..0000000 --- a/src/main/java/com/guwan/backend/model/paper/service/PaperQuService.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.guwan.backend.model.paper.service; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.service.IService; -import com.guwan.backend.core.api.dto.PagingReqDTO; -import com.guwan.backend.model.paper.dto.PaperQuDTO; -import com.guwan.backend.model.paper.dto.ext.PaperQuDetailDTO; -import com.guwan.backend.model.paper.entity.PaperQu; - - -import java.util.List; - -/** -*

-* 试卷考题业务类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 16:33 -*/ -public interface PaperQuService extends IService { - - /** - * 分页查询数据 - * @param reqDTO - * @return - */ - IPage paging(PagingReqDTO reqDTO); - - /** - * 根据试卷找出题目列表 - * @param paperId - * @return - */ - List listByPaper(String paperId); - - /** - * 查找详情 - * @param paperId - * @param quId - * @return - */ - PaperQu findByKey(String paperId, String quId); - - /** - * 根据组合索引更新 - * @param qu - */ - void updateByKey(PaperQu qu); - - /** - * 统计客观分 - * @param paperId - * @return - */ - int sumObjective(String paperId); - - /** - * 统计主观分 - * @param paperId - * @return - */ - int sumSubjective(String paperId); - - /** - * 找出全部试题列表 - * @param paperId - * @return - */ - List listForPaperResult(String paperId); -} diff --git a/src/main/java/com/guwan/backend/model/paper/service/PaperService.java b/src/main/java/com/guwan/backend/model/paper/service/PaperService.java deleted file mode 100644 index 047c91d..0000000 --- a/src/main/java/com/guwan/backend/model/paper/service/PaperService.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.guwan.backend.model.paper.service; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.service.IService; -import com.guwan.backend.core.api.dto.PagingReqDTO; -import com.guwan.backend.model.paper.dto.PaperDTO; -import com.guwan.backend.model.paper.dto.ext.PaperQuDetailDTO; -import com.guwan.backend.model.paper.dto.request.PaperAnswerDTO; -import com.guwan.backend.model.paper.dto.request.PaperListReqDTO; -import com.guwan.backend.model.paper.dto.response.ExamDetailRespDTO; -import com.guwan.backend.model.paper.dto.response.ExamResultRespDTO; -import com.guwan.backend.model.paper.dto.response.PaperListRespDTO; -import com.guwan.backend.model.paper.entity.Paper; - - -/** -*

-* 试卷业务类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 16:33 -*/ -public interface PaperService extends IService { - - /** - * 创建试卷 - * @param userId - * @param examId - * @return - */ - String createPaper(String userId, String examId); - - - /** - * 查找详情 - * @param paperId - * @return - */ - ExamDetailRespDTO paperDetail(String paperId); - - /** - * 考试结果 - * @param paperId - * @return - */ - ExamResultRespDTO paperResult(String paperId); - - /** - * 查找题目详情 - * @param paperId - * @param quId - * @return - */ - PaperQuDetailDTO findQuDetail(String paperId, String quId); - - /** - * 填充答案 - * @param reqDTO - */ - void fillAnswer(PaperAnswerDTO reqDTO); - - /** - * 交卷操作 - * @param paperId - * @return - */ - void handExam(String paperId); - - /** - * 试卷列表响应类 - * @param reqDTO - * @return - */ - IPage paging(PagingReqDTO reqDTO); - - /** - * 检测是否有进行中的考试 - * @param userId - * @return - */ - PaperDTO checkProcess(String userId); - -} diff --git a/src/main/java/com/guwan/backend/model/paper/service/impl/PaperQuAnswerServiceImpl.java b/src/main/java/com/guwan/backend/model/paper/service/impl/PaperQuAnswerServiceImpl.java deleted file mode 100644 index cfd595b..0000000 --- a/src/main/java/com/guwan/backend/model/paper/service/impl/PaperQuAnswerServiceImpl.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.guwan.backend.model.paper.service.impl; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.TypeReference; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - -import com.guwan.backend.core.api.dto.PagingReqDTO; -import com.guwan.backend.model.paper.dto.PaperQuAnswerDTO; -import com.guwan.backend.model.paper.dto.ext.PaperQuAnswerExtDTO; -import com.guwan.backend.model.paper.entity.PaperQuAnswer; -import com.guwan.backend.model.paper.mapper.PaperQuAnswerMapper; -import com.guwan.backend.model.paper.service.PaperQuAnswerService; -import org.springframework.stereotype.Service; - -import java.util.List; - -/** -*

-* 语言设置 服务实现类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 16:33 -*/ -@Service -public class PaperQuAnswerServiceImpl extends ServiceImpl implements PaperQuAnswerService { - - @Override - public IPage paging(PagingReqDTO reqDTO) { - - //创建分页对象 - IPage query = new Page<>(reqDTO.getCurrent(), reqDTO.getSize()); - - //查询条件 - QueryWrapper wrapper = new QueryWrapper<>(); - - //获得数据 - IPage page = this.page(query, wrapper); - //转换结果 - IPage pageData = JSON.parseObject(JSON.toJSONString(page), new TypeReference>(){}); - return pageData; - } - - @Override - public List listForExam(String paperId, String quId) { - return baseMapper.list(paperId, quId); - } - - @Override - public List listForFill(String paperId, String quId) { - //查询条件 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda() - .eq(PaperQuAnswer::getPaperId, paperId) - .eq(PaperQuAnswer::getQuId, quId); - - return this.list(wrapper); - } -} diff --git a/src/main/java/com/guwan/backend/model/paper/service/impl/PaperQuServiceImpl.java b/src/main/java/com/guwan/backend/model/paper/service/impl/PaperQuServiceImpl.java deleted file mode 100644 index 448e63f..0000000 --- a/src/main/java/com/guwan/backend/model/paper/service/impl/PaperQuServiceImpl.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.guwan.backend.model.paper.service.impl; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.TypeReference; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - -import com.guwan.backend.core.api.dto.PagingReqDTO; -import com.guwan.backend.core.BeanMapper; -import com.guwan.backend.model.paper.dto.PaperQuDTO; -import com.guwan.backend.model.paper.dto.ext.PaperQuDetailDTO; -import com.guwan.backend.model.paper.entity.PaperQu; -import com.guwan.backend.model.paper.mapper.PaperQuMapper; -import com.guwan.backend.model.paper.service.PaperQuService; -import org.springframework.stereotype.Service; - -import java.util.List; - -/** -*

-* 语言设置 服务实现类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 16:33 -*/ -@Service -public class PaperQuServiceImpl extends ServiceImpl implements PaperQuService { - - @Override - public IPage paging(PagingReqDTO reqDTO) { - - //创建分页对象 - IPage query = new Page<>(reqDTO.getCurrent(), reqDTO.getSize()); - - //查询条件 - QueryWrapper wrapper = new QueryWrapper<>(); - - //获得数据 - IPage page = this.page(query, wrapper); - //转换结果 - IPage pageData = JSON.parseObject(JSON.toJSONString(page), new TypeReference>(){}); - return pageData; - } - - @Override - public List listByPaper(String paperId) { - - //查询条件 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda().eq(PaperQu::getPaperId, paperId) - .orderByAsc(PaperQu::getSort); - - List list = this.list(wrapper); - return BeanMapper.mapList(list, PaperQuDTO.class); - } - - @Override - public PaperQu findByKey(String paperId, String quId) { - //查询条件 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda().eq(PaperQu::getPaperId, paperId) - .eq(PaperQu::getQuId, quId); - - return this.getOne(wrapper, false); - } - - @Override - public void updateByKey(PaperQu qu) { - - //查询条件 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda().eq(PaperQu::getPaperId, qu.getPaperId()) - .eq(PaperQu::getQuId, qu.getQuId()); - - this.update(qu, wrapper); - } - - @Override - public int sumObjective(String paperId) { - return baseMapper.sumObjective(paperId); - } - - @Override - public int sumSubjective(String paperId) { - return baseMapper.sumSubjective(paperId); - } - - @Override - public List listForPaperResult(String paperId) { - return baseMapper.listByPaper(paperId); - } -} diff --git a/src/main/java/com/guwan/backend/model/paper/service/impl/PaperServiceImpl.java b/src/main/java/com/guwan/backend/model/paper/service/impl/PaperServiceImpl.java deleted file mode 100644 index 68edd63..0000000 --- a/src/main/java/com/guwan/backend/model/paper/service/impl/PaperServiceImpl.java +++ /dev/null @@ -1,537 +0,0 @@ -package com.guwan.backend.model.paper.service.impl; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.core.toolkit.IdWorker; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - -import com.guwan.backend.core.api.ApiError; -import com.guwan.backend.core.api.dto.PagingReqDTO; -import com.guwan.backend.core.exception.ServiceException; -import com.guwan.backend.core.BeanMapper; -import com.guwan.backend.core.utils.CronUtils; -import com.guwan.backend.model.exam.dto.ExamDTO; -import com.guwan.backend.model.exam.dto.ExamRepoDTO; -import com.guwan.backend.model.exam.dto.ext.ExamRepoExtDTO; -import com.guwan.backend.model.exam.service.ExamService; -import com.guwan.backend.model.paper.dto.PaperDTO; -import com.guwan.backend.model.paper.dto.PaperQuDTO; -import com.guwan.backend.model.paper.dto.ext.PaperQuAnswerExtDTO; -import com.guwan.backend.model.paper.dto.ext.PaperQuDetailDTO; -import com.guwan.backend.model.paper.dto.request.PaperAnswerDTO; -import com.guwan.backend.model.paper.dto.request.PaperListReqDTO; -import com.guwan.backend.model.paper.dto.response.ExamDetailRespDTO; -import com.guwan.backend.model.paper.dto.response.ExamResultRespDTO; -import com.guwan.backend.model.paper.dto.response.PaperListRespDTO; -import com.guwan.backend.model.paper.entity.Paper; -import com.guwan.backend.model.paper.entity.PaperQu; -import com.guwan.backend.model.paper.entity.PaperQuAnswer; -import com.guwan.backend.model.paper.enums.ExamState; -import com.guwan.backend.model.paper.enums.PaperState; -import com.guwan.backend.model.paper.job.BreakExamJob; -import com.guwan.backend.model.paper.mapper.PaperMapper; -import com.guwan.backend.model.paper.service.PaperQuAnswerService; -import com.guwan.backend.model.paper.service.PaperQuService; -import com.guwan.backend.model.paper.service.PaperService; -import com.guwan.backend.model.qu.entity.Qu; -import com.guwan.backend.model.qu.entity.QuAnswer; -import com.guwan.backend.model.qu.enums.QuType; -import com.guwan.backend.model.qu.service.QuAnswerService; -import com.guwan.backend.model.qu.service.QuService; -import com.guwan.backend.model.user.book.service.UserBookService; -import com.guwan.backend.model.user.exam.service.UserExamService; -import org.apache.commons.lang3.StringUtils; -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.*; - -/** -*

-* 语言设置 服务实现类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 16:33 -*/ -@Service -public class PaperServiceImpl extends ServiceImpl implements PaperService { - - - @Autowired - private SysUserService sysUserService; - - @Autowired - private ExamService examService; - - @Autowired - private QuService quService; - - @Autowired - private QuAnswerService quAnswerService; - - @Autowired - private PaperService paperService; - - @Autowired - private PaperQuService paperQuService; - - @Autowired - private PaperQuAnswerService paperQuAnswerService; - - @Autowired - private UserBookService userBookService; - - @Autowired - private ExamRepoService examRepoService; - - @Autowired - private UserExamService userExamService; - - @Autowired - private JobService jobService; - - /** - * 展示的选项,ABC这样 - */ - private static List ABC = Arrays.asList(new String[]{ - "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K","L","M","N","O","P","Q","R","S","T","U","V","W","X" - ,"Y","Z" - }); - - - - - - @Transactional(rollbackFor = Exception.class) - @Override - public String createPaper(String userId, String examId) { - - // 校验是否有正在考试的试卷 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda() - .eq(Paper::getUserId, userId) - .eq(Paper::getState, PaperState.ING); - - int exists = this.count(wrapper); - - - if (exists > 0) { - throw new ServiceException(ApiError.ERROR_20010002); - } - - // 查找考试 - ExamDTO exam = examService.findById(examId); - - if(exam == null){ - throw new ServiceException(1, "考试不存在!"); - } - - if(!ExamState.ENABLE.equals(exam.getState())){ - throw new ServiceException(1, "考试状态不正确!"); - } - - // 考试题目列表 - List quList = this.generateByRepo(examId); - - if(CollectionUtils.isEmpty(quList)){ - throw new ServiceException(1, "规则不正确,无对应的考题!"); - } - - //保存试卷内容 - Paper paper = this.savePaper(userId, exam, quList); - - // 强制交卷任务 - String jobName = JobPrefix.BREAK_EXAM + paper.getId(); - jobService.addCronJob(BreakExamJob.class, jobName, CronUtils.dateToCron(paper.getLimitTime()), paper.getId()); - - return paper.getId(); - } - - @Override - public ExamDetailRespDTO paperDetail(String paperId) { - - - ExamDetailRespDTO respDTO = new ExamDetailRespDTO(); - - // 试题基本信息 - Paper paper = paperService.getById(paperId); - BeanMapper.copy(paper, respDTO); - - // 查找题目列表 - List list = paperQuService.listByPaper(paperId); - - List radioList = new ArrayList<>(); - List multiList = new ArrayList<>(); - List judgeList = new ArrayList<>(); - for(PaperQuDTO item: list){ - if(QuType.RADIO.equals(item.getQuType())){ - radioList.add(item); - } - if(QuType.MULTI.equals(item.getQuType())){ - multiList.add(item); - } - if(QuType.JUDGE.equals(item.getQuType())){ - judgeList.add(item); - } - } - - respDTO.setRadioList(radioList); - respDTO.setMultiList(multiList); - respDTO.setJudgeList(judgeList); - return respDTO; - } - - @Override - public ExamResultRespDTO paperResult(String paperId) { - - ExamResultRespDTO respDTO = new ExamResultRespDTO(); - - // 试题基本信息 - Paper paper = paperService.getById(paperId); - BeanMapper.copy(paper, respDTO); - - List quList = paperQuService.listForPaperResult(paperId); - respDTO.setQuList(quList); - - return respDTO; - } - - @Override - public PaperQuDetailDTO findQuDetail(String paperId, String quId) { - - PaperQuDetailDTO respDTO = new PaperQuDetailDTO(); - // 问题 - Qu qu = quService.getById(quId); - - // 基本信息 - PaperQu paperQu = paperQuService.findByKey(paperId, quId); - BeanMapper.copy(paperQu, respDTO); - respDTO.setContent(qu.getContent()); - respDTO.setImage(qu.getImage()); - - // 答案列表 - List list = paperQuAnswerService.listForExam(paperId, quId); - respDTO.setAnswerList(list); - - return respDTO; - } - - - /** - * 题库组题方式产生题目列表 - * @param examId - * @return - */ - private List generateByRepo(String examId){ - - // 查找规则指定的题库 - List list = examRepoService.listByExam(examId); - - //最终的题目列表 - List quList = new ArrayList<>(); - - //排除ID,避免题目重复 - List excludes = new ArrayList<>(); - excludes.add("none"); - - if (!CollectionUtils.isEmpty(list)) { - for (ExamRepoExtDTO item : list) { - - // 单选题 - if(item.getRadioCount() > 0){ - List radioList = quService.listByRandom(item.getRepoId(), QuType.RADIO, excludes, item.getRadioCount()); - for (Qu qu : radioList) { - PaperQu paperQu = this.processPaperQu(item, qu); - quList.add(paperQu); - excludes.add(qu.getId()); - } - } - - //多选题 - if(item.getMultiCount() > 0) { - List multiList = quService.listByRandom(item.getRepoId(), QuType.MULTI, excludes, - item.getMultiCount()); - for (Qu qu : multiList) { - PaperQu paperQu = this.processPaperQu(item, qu); - quList.add(paperQu); - excludes.add(qu.getId()); - } - } - - // 判断题 - if(item.getJudgeCount() > 0) { - List judgeList = quService.listByRandom(item.getRepoId(), QuType.JUDGE, excludes, - item.getJudgeCount()); - for (Qu qu : judgeList) { - PaperQu paperQu = this.processPaperQu(item, qu); - quList.add(paperQu); - excludes.add(qu.getId()); - } - } - } - } - return quList; - } - - - - /** - * 填充试题题目信息 - * @param repo - * @param qu - * @return - */ - private PaperQu processPaperQu(ExamRepoDTO repo, Qu qu) { - - //保存试题信息 - PaperQu paperQu = new PaperQu(); - paperQu.setQuId(qu.getId()); - paperQu.setAnswered(false); - paperQu.setIsRight(false); - paperQu.setQuType(qu.getQuType()); - - if (QuType.RADIO.equals(qu.getQuType())) { - paperQu.setScore(repo.getRadioScore()); - paperQu.setActualScore(repo.getRadioScore()); - } - - if (QuType.MULTI.equals(qu.getQuType())) { - paperQu.setScore(repo.getMultiScore()); - paperQu.setActualScore(repo.getMultiScore()); - } - - if (QuType.JUDGE.equals(qu.getQuType())) { - paperQu.setScore(repo.getJudgeScore()); - paperQu.setActualScore(repo.getJudgeScore()); - } - - return paperQu; - } - - - /** - * 保存试卷 - * @param userId - * @param exam - * @param quList - * @return - */ - private Paper savePaper(String userId, ExamDTO exam, List quList) { - - - // 查找用户 - SysUser user = sysUserService.getById(userId); - - //保存试卷基本信息 - Paper paper = new Paper(); - paper.setDepartId(user.getDepartId()); - paper.setExamId(exam.getId()); - paper.setTitle(exam.getTitle()); - paper.setTotalScore(exam.getTotalScore()); - paper.setTotalTime(exam.getTotalTime()); - paper.setUserScore(0); - paper.setUserId(userId); - paper.setCreateTime(new Date()); - paper.setUpdateTime(new Date()); - paper.setQualifyScore(exam.getQualifyScore()); - paper.setState(PaperState.ING); - paper.setHasSaq(false); - - // 截止时间 - Calendar cl = Calendar.getInstance(); - cl.setTimeInMillis(System.currentTimeMillis()); - cl.add(Calendar.MINUTE, exam.getTotalTime()); - paper.setLimitTime(cl.getTime()); - - paperService.save(paper); - - if (!CollectionUtils.isEmpty(quList)) { - this.savePaperQu(paper.getId(), quList); - } - - return paper; - } - - - - /** - * 保存试卷试题列表 - * @param paperId - * @param quList - */ - private void savePaperQu(String paperId, List quList){ - - List batchQuList = new ArrayList<>(); - List batchAnswerList = new ArrayList<>(); - - int sort = 0; - for (PaperQu item : quList) { - - item.setPaperId(paperId); - item.setSort(sort); - item.setId(IdWorker.getIdStr()); - - //回答列表 - List answerList = quAnswerService.listAnswerByRandom(item.getQuId()); - - if (!CollectionUtils.isEmpty(answerList)) { - - int ii = 0; - for (QuAnswer answer : answerList) { - PaperQuAnswer paperQuAnswer = new PaperQuAnswer(); - paperQuAnswer.setId(UUID.randomUUID().toString()); - paperQuAnswer.setPaperId(paperId); - paperQuAnswer.setQuId(answer.getQuId()); - paperQuAnswer.setAnswerId(answer.getId()); - paperQuAnswer.setChecked(false); - paperQuAnswer.setSort(ii); - paperQuAnswer.setAbc(ABC.get(ii)); - paperQuAnswer.setIsRight(answer.getIsRight()); - ii++; - batchAnswerList.add(paperQuAnswer); - } - } - - batchQuList.add(item); - sort++; - } - - //添加问题 - paperQuService.saveBatch(batchQuList); - - //批量添加问题答案 - paperQuAnswerService.saveBatch(batchAnswerList); - } - - @Transactional(rollbackFor = Exception.class) - @Override - public void fillAnswer(PaperAnswerDTO reqDTO) { - - - // 未作答 - if(CollectionUtils.isEmpty(reqDTO.getAnswers()) - && StringUtils.isBlank(reqDTO.getAnswer())){ - return; - } - - //查找答案列表 - List list = paperQuAnswerService.listForFill(reqDTO.getPaperId(), reqDTO.getQuId()); - - //是否正确 - boolean right = true; - - //更新正确答案 - for (PaperQuAnswer item : list) { - - if (reqDTO.getAnswers().contains(item.getId())) { - item.setChecked(true); - } else { - item.setChecked(false); - } - - //有一个对不上就是错的 - if (item.getIsRight()!=null && !item.getIsRight().equals(item.getChecked())) { - right = false; - } - paperQuAnswerService.updateById(item); - } - - //修改为已回答 - PaperQu qu = new PaperQu(); - qu.setQuId(reqDTO.getQuId()); - qu.setPaperId(reqDTO.getPaperId()); - qu.setIsRight(right); - qu.setAnswer(reqDTO.getAnswer()); - qu.setAnswered(true); - - paperQuService.updateByKey(qu); - - } - - @Transactional(rollbackFor = Exception.class) - @Override - public void handExam(String paperId) { - - //获取试卷信息 - Paper paper = paperService.getById(paperId); - - //如果不是正常的,抛出异常 - if(!PaperState.ING.equals(paper.getState())){ - throw new ServiceException(1, "试卷状态不正确!"); - } - - // 客观分 - int objScore = paperQuService.sumObjective(paperId); - paper.setObjScore(objScore); - paper.setUserScore(objScore); - - // 主观分,因为要阅卷,所以给0 - paper.setSubjScore(0); - - // 待阅卷 - if(paper.getHasSaq()) { - paper.setState(PaperState.WAIT_OPT); - }else { - - // 同步保存考试成绩 - userExamService.joinResult(paper.getUserId(), paper.getExamId(), objScore, objScore>=paper.getQualifyScore()); - - paper.setState(PaperState.FINISHED); - } - paper.setUpdateTime(new Date()); - - //计算考试时长 - Calendar cl = Calendar.getInstance(); - cl.setTimeInMillis(System.currentTimeMillis()); - int userTime = (int)((System.currentTimeMillis() - paper.getCreateTime().getTime()) / 1000 / 60); - if(userTime == 0){ - userTime = 1; - } - paper.setUserTime(userTime); - - //更新试卷 - paperService.updateById(paper); - - - // 终止定时任务 - String name = JobPrefix.BREAK_EXAM + paperId; - jobService.deleteJob(name, JobGroup.SYSTEM); - - //把打错的问题加入错题本 - List list = paperQuService.listByPaper(paperId); - for(PaperQuDTO qu: list){ - // 主观题和对的都不加入错题库 - if(qu.getIsRight()){ - continue; - } - //加入错题本 - new Thread(() -> userBookService.addBook(paper.getExamId(), qu.getQuId())).run(); - } - } - - @Override - public IPage paging(PagingReqDTO reqDTO) { - return baseMapper.paging(reqDTO.toPage(), reqDTO.getParams()); - } - - - @Override - public PaperDTO checkProcess(String userId) { - - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda() - .eq(Paper::getUserId, userId) - .eq(Paper::getState, PaperState.ING); - - Paper paper = this.getOne(wrapper, false); - - if (paper != null) { - return BeanMapper.map(paper, PaperDTO.class); - } - - return null; - } -} diff --git a/src/main/java/com/guwan/backend/model/qu/controller/QuController.java b/src/main/java/com/guwan/backend/model/qu/controller/QuController.java deleted file mode 100644 index f30efbc..0000000 --- a/src/main/java/com/guwan/backend/model/qu/controller/QuController.java +++ /dev/null @@ -1,316 +0,0 @@ -package com.guwan.backend.model.qu.controller; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.google.common.collect.Lists; -import com.yf.exam.core.api.ApiRest; -import com.yf.exam.core.api.controller.BaseController; -import com.yf.exam.core.api.dto.BaseIdReqDTO; -import com.yf.exam.core.api.dto.BaseIdRespDTO; -import com.yf.exam.core.api.dto.BaseIdsReqDTO; -import com.yf.exam.core.api.dto.PagingReqDTO; -import com.yf.exam.core.exception.ServiceException; -import com.yf.exam.core.utils.excel.ExportExcel; -import com.yf.exam.core.utils.excel.ImportExcel; -import com.yf.exam.modules.qu.dto.QuDTO; -import com.yf.exam.modules.qu.dto.export.QuExportDTO; -import com.yf.exam.modules.qu.dto.ext.QuDetailDTO; -import com.yf.exam.modules.qu.dto.request.QuQueryReqDTO; -import com.yf.exam.modules.qu.service.QuService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.apache.commons.lang3.StringUtils; -import org.apache.poi.openxml4j.exceptions.InvalidFormatException; -import org.apache.shiro.authz.annotation.RequiresRoles; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; - -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.Arrays; -import java.util.List; - -/** -*

-* 问题题目控制器 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 13:25 -*/ -@Api(tags={"问题题目"}) -@RestController -@RequestMapping("/exam/api/qu/qu") -public class QuController extends BaseController { - - @Autowired - private QuService baseService; - - /** - * 添加或修改 - * - * @param reqDTO - * @return - */ - @RequiresRoles("sa") - @ApiOperation(value = "添加或修改") - @RequestMapping(value = "/save", method = {RequestMethod.POST}) - public ApiRest save(@RequestBody QuDetailDTO reqDTO) { - baseService.save(reqDTO); - return super.success(); - } - - /** - * 批量删除 - * - * @param reqDTO - * @return - */ - @RequiresRoles("sa") - @ApiOperation(value = "批量删除") - @RequestMapping(value = "/delete", method = {RequestMethod.POST}) - public ApiRest edit(@RequestBody BaseIdsReqDTO reqDTO) { - //根据ID删除 - baseService.delete(reqDTO.getIds()); - return super.success(); - } - - /** - * 查找详情 - * - * @param reqDTO - * @return - */ - @ApiOperation(value = "查找详情") - @RequestMapping(value = "/detail", method = {RequestMethod.POST}) - public ApiRest detail(@RequestBody BaseIdReqDTO reqDTO) { - QuDetailDTO dto = baseService.detail(reqDTO.getId()); - return super.success(dto); - } - - /** - * 分页查找 - * - * @param reqDTO - * @return - */ - @RequiresRoles("sa") - @ApiOperation(value = "分页查找") - @RequestMapping(value = "/paging", method = {RequestMethod.POST}) - public ApiRest> paging(@RequestBody PagingReqDTO reqDTO) { - - //分页查询并转换 - IPage page = baseService.paging(reqDTO); - - return super.success(page); - } - - - /** - * 导出excel文件 - */ - @RequiresRoles("sa") - @ResponseBody - @RequestMapping(value = "/export") - public ApiRest exportFile(HttpServletResponse response, @RequestBody QuQueryReqDTO reqDTO) { - - - // 导出文件名 - String fileName = "导出的试题-" + System.currentTimeMillis() + ".xlsx"; - - try { - - int no = 0; - String quId = ""; - List list = baseService.listForExport(reqDTO); - for (QuExportDTO item : list) { - if (!quId.equals(item.getQId())) { - quId = item.getQId(); - no += 1; - } else { - item.setQuType("0"); - item.setQContent(""); - item.setQAnalysis(""); - item.setRepoList(null); - item.setQImage(""); - item.setQVideo(""); - } - item.setNo(String.valueOf(no)); - } - new ExportExcel("试题", QuExportDTO.class).setDataList(list).write(response, fileName).dispose(); - return super.success(); - } catch (Exception e) { - return failure(e.getMessage()); - } - } - - /** - * 导入Excel - * - * @param file - * @return - */ - @RequiresRoles("sa") - @ResponseBody - @RequestMapping(value = "/import") - public ApiRest importFile(@RequestParam("file") MultipartFile file) { - - try { - - ImportExcel ei = new ImportExcel(file, 1, 0); - List list = ei.getDataList(QuExportDTO.class); - - // 校验数据 - this.checkExcel(list); - - // 导入数据条数 - baseService.importExcel(list); - - // 导入成功 - return super.success(); - - } catch (IOException e) { - - } catch (InvalidFormatException e) { - - } catch (IllegalAccessException e) { - - } catch (InstantiationException e) { - - } - - return super.failure(); - } - - /** - * 校验Excel - * - * @param list - * @throws Exception - */ - private void checkExcel(List list) throws ServiceException { - - // 约定第三行开始导入 - int line = 3; - StringBuffer sb = new StringBuffer(); - - if (CollectionUtils.isEmpty(list)) { - throw new ServiceException(1, "您导入的数据似乎是一个空表格!"); - } - - Integer quNo = null; - for (QuExportDTO item : list) { - - System.out.println(item.getNo()); - if (StringUtils.isBlank(item.getNo())) { - line++; - continue; - } - - System.out.println(item.getQContent()); - Integer no; - - try { - no = Integer.parseInt(item.getNo()); - } catch (Exception e) { - line++; - continue; - } - - if (no == null) { - sb.append("第" + line + "行,题目序号不能为空!
"); - } - - if (quNo == null || !quNo.equals(no)) { - - if (item.getQuType() == null) { - sb.append("第" + line + "行,题目类型不能为空
"); - } - - if (StringUtils.isBlank(item.getQContent())) { - sb.append("第" + line + "行,题目内容不能为空
"); - } - - if (CollectionUtils.isEmpty(item.getRepoList())) { - sb.append("第" + line + "行,题目必须包含一个题库
"); - } - } - - if (StringUtils.isBlank(item.getAIsRight())) { - sb.append("第" + line + "行,选项是否正确不能为空
"); - } - - if (StringUtils.isBlank(item.getAContent()) && StringUtils.isBlank(item.getAImage())) { - sb.append("第" + line + "行,选项内容和选项图片必须有一个不为空
"); - } - - quNo = no; - line++; - } - - // 存在错误 - if (!"".equals(sb.toString())) { - throw new ServiceException(1, sb.toString()); - } - } - - /** - * 下载导入试题数据模板 - */ - @ResponseBody - @RequestMapping(value = "import/template") - public ApiRest importFileTemplate(HttpServletResponse response) { - try { - String fileName = "试题导入模板.xlsx"; - List list = Lists.newArrayList(); - - QuExportDTO l1 = new QuExportDTO(); - l1.setNo("正式导入,请删除此说明行:数字,相同的数字表示同一题的序列"); - l1.setQContent("问题内容"); - l1.setQAnalysis("整个问题的解析"); - l1.setQuType("只能填写1、2、3、4;1表示单选题,2表示多选题,3表示判断题,4表示主观题"); - l1.setQImage("题目图片,完整URL,多个用逗号隔开,限制10个"); - l1.setQVideo("题目视频,完整URL,只限一个"); - l1.setAImage("答案图片,完整URL,只限一个"); - l1.setRepoList(Arrays.asList(new String[]{"已存在题库的ID,多个用逗号隔开,题库ID错误无法导入"})); - l1.setAContent("候选答案1"); - l1.setAIsRight("只能填写0或1,0表示否,1表示是"); - l1.setAAnalysis("这个项是正确的"); - - - QuExportDTO l2 = new QuExportDTO(); - l2.setQContent("找出以下可以被2整除的数(多选)"); - l2.setQAnalysis("最基本的数学题,不做过多解析"); - l2.setQuType("2"); - l2.setNo("1"); - l2.setAIsRight("1"); - l2.setAContent("数字:2"); - l2.setAAnalysis("2除以2=1,对的"); - - QuExportDTO l3 = new QuExportDTO(); - l3.setNo("1"); - l3.setAIsRight("0"); - l3.setAContent("数字:3"); - l3.setAAnalysis("3除以2=1.5,不能被整除"); - - QuExportDTO l4 = new QuExportDTO(); - l4.setNo("1"); - l4.setAIsRight("1"); - l4.setAContent("数字:6"); - l4.setAAnalysis("6除以2=3,对的"); - - - - list.add(l1); - list.add(l2); - list.add(l3); - list.add(l4); - - new ExportExcel("试题数据", QuExportDTO.class, 1).setDataList(list).write(response, fileName).dispose(); - return super.success(); - } catch (Exception e) { - return super.failure("导入模板下载失败!失败信息:"+e.getMessage()); - } - } -} diff --git a/src/main/java/com/guwan/backend/model/qu/dto/QuAnswerDTO.java b/src/main/java/com/guwan/backend/model/qu/dto/QuAnswerDTO.java deleted file mode 100644 index 47646c6..0000000 --- a/src/main/java/com/guwan/backend/model/qu/dto/QuAnswerDTO.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.guwan.backend.model.qu.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; - -/** -*

-* 候选答案请求类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 13:23 -*/ -@Data -@ApiModel(value="候选答案", description="候选答案") -public class QuAnswerDTO implements Serializable { - - private static final long serialVersionUID = 1L; - - - @ApiModelProperty(value = "答案ID", required=true) - private String id; - - @ApiModelProperty(value = "问题ID", required=true) - private String quId; - - @ApiModelProperty(value = "是否正确", required=true) - private Boolean isRight; - - @ApiModelProperty(value = "选项图片", required=true) - private String image; - - @ApiModelProperty(value = "答案内容", required=true) - private String content; - - @ApiModelProperty(value = "答案分析", required=true) - private String analysis; - -} diff --git a/src/main/java/com/guwan/backend/model/qu/dto/QuDTO.java b/src/main/java/com/guwan/backend/model/qu/dto/QuDTO.java deleted file mode 100644 index cec2699..0000000 --- a/src/main/java/com/guwan/backend/model/qu/dto/QuDTO.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.guwan.backend.model.qu.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; -import java.util.Date; - -/** -*

-* 问题题目请求类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 13:23 -*/ -@Data -@ApiModel(value="问题题目", description="问题题目") -public class QuDTO implements Serializable { - - private static final long serialVersionUID = 1L; - - - @ApiModelProperty(value = "题目ID", required=true) - private String id; - - @ApiModelProperty(value = "题目类型", required=true) - private Integer quType; - - @ApiModelProperty(value = "1普通,2较难", required=true) - private Integer level; - - @ApiModelProperty(value = "题目图片", required=true) - private String image; - - @ApiModelProperty(value = "题目内容", required=true) - private String content; - - - @ApiModelProperty(value = "创建时间", required=true) - private Date createTime; - - @ApiModelProperty(value = "更新时间", required=true) - private Date updateTime; - - @ApiModelProperty(value = "题目备注", required=true) - private String remark; - - @ApiModelProperty(value = "整题解析", required=true) - private String analysis; - -} diff --git a/src/main/java/com/guwan/backend/model/qu/dto/QuRepoDTO.java b/src/main/java/com/guwan/backend/model/qu/dto/QuRepoDTO.java deleted file mode 100644 index b7234c0..0000000 --- a/src/main/java/com/guwan/backend/model/qu/dto/QuRepoDTO.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.guwan.backend.model.qu.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; - -/** -*

-* 试题题库请求类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 13:23 -*/ -@Data -@ApiModel(value="试题题库", description="试题题库") -public class QuRepoDTO implements Serializable { - - private static final long serialVersionUID = 1L; - - - private String id; - - @ApiModelProperty(value = "试题", required=true) - private String quId; - - @ApiModelProperty(value = "归属题库", required=true) - private String repoId; - - @ApiModelProperty(value = "题目类型", required=true) - private Integer quType; - - @ApiModelProperty(value = "排序", required=true) - private Integer sort; - -} \ No newline at end of file diff --git a/src/main/java/com/guwan/backend/model/qu/dto/export/QuExportDTO.java b/src/main/java/com/guwan/backend/model/qu/dto/export/QuExportDTO.java deleted file mode 100644 index d2a3191..0000000 --- a/src/main/java/com/guwan/backend/model/qu/dto/export/QuExportDTO.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.guwan.backend.model.qu.dto.export; - -import com.yf.exam.core.utils.excel.annotation.ExcelField; -import com.yf.exam.core.utils.excel.fieldtype.ListType; -import lombok.Data; - -import java.util.List; - -/** - * 用于导出的数据结构 - * @author bool - */ -@Data -public class QuExportDTO { - - private static final long serialVersionUID = 1L; - - /** - * - */ - private String qId; - - @ExcelField(title="题目序号", align=2, sort=1) - private String no; - @ExcelField(title="题目类型", align=2, sort=2) - private String quType; - @ExcelField(title="题目内容", align=2, sort=3) - private String qContent; - @ExcelField(title="整体解析", align=2, sort=4) - private String qAnalysis; - @ExcelField(title="题目图片", align=2, sort=5) - private String qImage; - @ExcelField(title="题目视频", align=2, sort=6) - private String qVideo; - @ExcelField(title="所属题库", align=2, sort=7, fieldType = ListType.class) - private List repoList; - @ExcelField(title="是否正确项", align=2, sort=8) - private String aIsRight; - @ExcelField(title="选项内容", align=2, sort=9) - private String aContent; - @ExcelField(title="选项解析", align=2, sort=10) - private String aAnalysis; - @ExcelField(title="选项图片", align=2, sort=11) - private String aImage; -} diff --git a/src/main/java/com/guwan/backend/model/qu/dto/export/QuImportDTO.java b/src/main/java/com/guwan/backend/model/qu/dto/export/QuImportDTO.java deleted file mode 100644 index 45cebb3..0000000 --- a/src/main/java/com/guwan/backend/model/qu/dto/export/QuImportDTO.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.guwan.backend.model.qu.dto.export; - -import com.yf.exam.modules.qu.dto.QuAnswerDTO; -import lombok.Data; - -import java.util.List; - -/** - * 用于导出的数据结构 - * @author bool - */ -@Data -public class QuImportDTO { - - private static final long serialVersionUID = 1L; - - private String quType; - private String qContent; - private String qAnalysis; - private String qImage; - private String repoName; - private List answerList; -} diff --git a/src/main/java/com/guwan/backend/model/qu/dto/ext/QuDetailDTO.java b/src/main/java/com/guwan/backend/model/qu/dto/ext/QuDetailDTO.java deleted file mode 100644 index 1f4ab90..0000000 --- a/src/main/java/com/guwan/backend/model/qu/dto/ext/QuDetailDTO.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.guwan.backend.model.qu.dto.ext; - -import com.yf.exam.modules.qu.dto.QuAnswerDTO; -import com.yf.exam.modules.qu.dto.QuDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** -*

-* 问题题目请求类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 13:23 -*/ -@Data -@ApiModel(value="问题题目详情", description="问题题目详情") -public class QuDetailDTO extends QuDTO { - - private static final long serialVersionUID = 1L; - - - @ApiModelProperty(value = "备选项列表", required=true) - private List answerList; - - @ApiModelProperty(value = "题库列表", required=true) - private List repoIds; - - -} diff --git a/src/main/java/com/guwan/backend/model/qu/dto/request/QuQueryReqDTO.java b/src/main/java/com/guwan/backend/model/qu/dto/request/QuQueryReqDTO.java deleted file mode 100644 index c9ec11f..0000000 --- a/src/main/java/com/guwan/backend/model/qu/dto/request/QuQueryReqDTO.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.guwan.backend.model.qu.dto.request; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; -import java.util.List; - -/** -*

-* 问题题目请求类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 13:23 -*/ -@Data -@ApiModel(value="题目查询请求类", description="题目查询请求类") -public class QuQueryReqDTO implements Serializable { - - private static final long serialVersionUID = 1L; - - - @ApiModelProperty(value = "题目类型") - private Integer quType; - - @ApiModelProperty(value = "归属题库") - private List repoIds; - - @ApiModelProperty(value = "题目内容") - private String content; - - @ApiModelProperty(value = "排除ID列表") - private List excludes; - - -} diff --git a/src/main/java/com/guwan/backend/model/qu/dto/request/QuRepoBatchReqDTO.java b/src/main/java/com/guwan/backend/model/qu/dto/request/QuRepoBatchReqDTO.java deleted file mode 100644 index 6d39944..0000000 --- a/src/main/java/com/guwan/backend/model/qu/dto/request/QuRepoBatchReqDTO.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.guwan.backend.model.qu.dto.request; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; -import java.util.List; - -/** -*

-* 问题题目请求类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 13:23 -*/ -@Data -@ApiModel(value="试题题库批量操作类", description="试题题库批量操作类") -public class QuRepoBatchReqDTO implements Serializable { - - private static final long serialVersionUID = 1L; - - - @ApiModelProperty(value = "题目ID", required=true) - private List quIds; - - @ApiModelProperty(value = "题目类型", required=true) - private List repoIds; - - @ApiModelProperty(value = "是否移除,否就新增;是就移除", required=true) - private Boolean remove; - -} diff --git a/src/main/java/com/guwan/backend/model/qu/entity/Qu.java b/src/main/java/com/guwan/backend/model/qu/entity/Qu.java deleted file mode 100644 index c20b6b6..0000000 --- a/src/main/java/com/guwan/backend/model/qu/entity/Qu.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.guwan.backend.model.qu.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.extension.activerecord.Model; -import lombok.Data; - -import java.util.Date; - -/** -*

-* 问题题目实体类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 13:23 -*/ -@Data -@TableName("el_qu") -public class Qu extends Model { - - private static final long serialVersionUID = 1L; - - /** - * 题目ID - */ - @TableId(value = "id", type = IdType.ASSIGN_ID) - private String id; - - /** - * 题目类型 - */ - @TableField("qu_type") - private Integer quType; - - /** - * 1普通,2较难 - */ - private Integer level; - - /** - * 题目图片 - */ - private String image; - - /** - * 题目内容 - */ - private String content; - - /** - * 创建时间 - */ - @TableField("create_time") - private Date createTime; - - /** - * 更新时间 - */ - @TableField("update_time") - private Date updateTime; - - /** - * 题目备注 - */ - private String remark; - - /** - * 整题解析 - */ - private String analysis; - -} diff --git a/src/main/java/com/guwan/backend/model/qu/entity/QuAnswer.java b/src/main/java/com/guwan/backend/model/qu/entity/QuAnswer.java deleted file mode 100644 index 4f9f4c3..0000000 --- a/src/main/java/com/guwan/backend/model/qu/entity/QuAnswer.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.guwan.backend.model.qu.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.extension.activerecord.Model; -import lombok.Data; - -/** -*

-* 候选答案实体类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 13:23 -*/ -@Data -@TableName("el_qu_answer") -public class QuAnswer extends Model { - - private static final long serialVersionUID = 1L; - - /** - * 答案ID - */ - @TableId(value = "id", type = IdType.ASSIGN_ID) - private String id; - - /** - * 问题ID - */ - @TableField("qu_id") - private String quId; - - /** - * 是否正确 - */ - @TableField("is_right") - private Boolean isRight; - - /** - * 选项图片 - */ - private String image; - - /** - * 答案内容 - */ - private String content; - - - /** - * 答案分析 - */ - private String analysis; - -} diff --git a/src/main/java/com/guwan/backend/model/qu/entity/QuRepo.java b/src/main/java/com/guwan/backend/model/qu/entity/QuRepo.java deleted file mode 100644 index 7418d90..0000000 --- a/src/main/java/com/guwan/backend/model/qu/entity/QuRepo.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.guwan.backend.model.qu.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.extension.activerecord.Model; -import lombok.Data; - -/** -*

-* 试题题库实体类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 13:23 -*/ -@Data -@TableName("el_qu_repo") -public class QuRepo extends Model { - - private static final long serialVersionUID = 1L; - - @TableId(value = "id", type = IdType.ASSIGN_ID) - private String id; - - /** - * 试题 - */ - @TableField("qu_id") - private String quId; - - /** - * 归属题库 - */ - @TableField("repo_id") - private String repoId; - - /** - * 题目类型 - */ - @TableField("qu_type") - private Integer quType; - - /** - * 排序 - */ - private Integer sort; - -} diff --git a/src/main/java/com/guwan/backend/model/qu/enums/QuType.java b/src/main/java/com/guwan/backend/model/qu/enums/QuType.java deleted file mode 100644 index 3f45534..0000000 --- a/src/main/java/com/guwan/backend/model/qu/enums/QuType.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.guwan.backend.model.qu.enums; - - -/** - * 题目类型 - * @author bool - * @date 2019-10-30 13:11 - */ -public interface QuType { - - /** - * 单选题 - */ - Integer RADIO = 1; - - /** - * 多选题 - */ - Integer MULTI = 2; - - /** - * 判断题 - */ - Integer JUDGE = 3; - -} diff --git a/src/main/java/com/guwan/backend/model/qu/mapper/QuAnswerMapper.java b/src/main/java/com/guwan/backend/model/qu/mapper/QuAnswerMapper.java deleted file mode 100644 index 0872594..0000000 --- a/src/main/java/com/guwan/backend/model/qu/mapper/QuAnswerMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.guwan.backend.model.qu.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yf.exam.modules.qu.entity.QuAnswer; - -/** -*

-* 候选答案Mapper -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 13:23 -*/ -public interface QuAnswerMapper extends BaseMapper { - -} diff --git a/src/main/java/com/guwan/backend/model/qu/mapper/QuMapper.java b/src/main/java/com/guwan/backend/model/qu/mapper/QuMapper.java deleted file mode 100644 index 4dcf2cb..0000000 --- a/src/main/java/com/guwan/backend/model/qu/mapper/QuMapper.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.guwan.backend.model.qu.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.yf.exam.modules.qu.dto.QuDTO; -import com.yf.exam.modules.qu.dto.export.QuExportDTO; -import com.yf.exam.modules.qu.dto.request.QuQueryReqDTO; -import com.yf.exam.modules.qu.entity.Qu; -import org.apache.ibatis.annotations.Param; - -import java.util.List; - -/** -*

-* 问题题目Mapper -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 13:23 -*/ -public interface QuMapper extends BaseMapper { - - - - /** - * 随机抽取题库的数据 - * @param repoId - * @param quType - * @param level - * @param excludes 要排除的ID列表 - * @param size - * @return - */ - List listByRandom(@Param("repoId") String repoId, - @Param("quType") Integer quType, - @Param("excludes") List excludes, - @Param("size") Integer size); - - /** - * 查找导出列表 - * @param query - * @return - */ - List listForExport(@Param("query") QuQueryReqDTO query); - - /** - * 分页查找 - * @param page - * @param query - * @return - */ - IPage paging(Page page, @Param("query") QuQueryReqDTO query); - - -} diff --git a/src/main/java/com/guwan/backend/model/qu/mapper/QuRepoMapper.java b/src/main/java/com/guwan/backend/model/qu/mapper/QuRepoMapper.java deleted file mode 100644 index 514f9f9..0000000 --- a/src/main/java/com/guwan/backend/model/qu/mapper/QuRepoMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.guwan.backend.model.qu.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yf.exam.modules.qu.entity.QuRepo; - -/** -*

-* 试题题库Mapper -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 13:23 -*/ -public interface QuRepoMapper extends BaseMapper { - -} diff --git a/src/main/java/com/guwan/backend/model/qu/service/QuAnswerService.java b/src/main/java/com/guwan/backend/model/qu/service/QuAnswerService.java deleted file mode 100644 index 31da2c8..0000000 --- a/src/main/java/com/guwan/backend/model/qu/service/QuAnswerService.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.guwan.backend.model.qu.service; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.service.IService; -import com.yf.exam.core.api.dto.PagingReqDTO; -import com.yf.exam.modules.qu.dto.QuAnswerDTO; -import com.yf.exam.modules.qu.entity.QuAnswer; - -import java.util.List; - -/** -*

-* 候选答案业务类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 13:23 -*/ -public interface QuAnswerService extends IService { - - /** - * 分页查询数据 - * @param reqDTO - * @return - */ - IPage paging(PagingReqDTO reqDTO); - - /** - * 根据题目ID查询答案并随机 - * @param quId - * @return - */ - List listAnswerByRandom(String quId); - - /** - * 根据问题查找答案 - * @param quId - * @return - */ - List listByQu(String quId); - - /** - * 保存试题 - * @param quId - * @param list - */ - void saveAll(String quId, List list); -} diff --git a/src/main/java/com/guwan/backend/model/qu/service/QuRepoService.java b/src/main/java/com/guwan/backend/model/qu/service/QuRepoService.java deleted file mode 100644 index 9b85f39..0000000 --- a/src/main/java/com/guwan/backend/model/qu/service/QuRepoService.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.guwan.backend.model.qu.service; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.service.IService; -import com.yf.exam.core.api.dto.PagingReqDTO; -import com.yf.exam.modules.qu.dto.QuRepoDTO; -import com.yf.exam.modules.qu.dto.request.QuRepoBatchReqDTO; -import com.yf.exam.modules.qu.entity.QuRepo; - -import java.util.List; - -/** -*

-* 试题题库业务类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 13:23 -*/ -public interface QuRepoService extends IService { - - /** - * 分页查询数据 - * @param reqDTO - * @return - */ - IPage paging(PagingReqDTO reqDTO); - - /** - * 保存全部列表 - * @param quId - * @param quType - * @param ids - */ - void saveAll(String quId, Integer quType, List ids); - - /** - * 根据问题查找题库 - * @param quId - * @return - */ - List listByQu(String quId); - - /** - * 根据题库查找题目ID列表 - * @param repoId - * @param quType - * @param rand - * @return - */ - List listByRepo(String repoId, Integer quType, boolean rand); - - /** - * 批量操作 - * @param reqDTO - */ - void batchAction(QuRepoBatchReqDTO reqDTO); - -} diff --git a/src/main/java/com/guwan/backend/model/qu/service/QuService.java b/src/main/java/com/guwan/backend/model/qu/service/QuService.java deleted file mode 100644 index 413ac87..0000000 --- a/src/main/java/com/guwan/backend/model/qu/service/QuService.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.guwan.backend.model.qu.service; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.service.IService; -import com.yf.exam.core.api.dto.PagingReqDTO; -import com.yf.exam.modules.qu.dto.QuDTO; -import com.yf.exam.modules.qu.dto.export.QuExportDTO; -import com.yf.exam.modules.qu.dto.ext.QuDetailDTO; -import com.yf.exam.modules.qu.dto.request.QuQueryReqDTO; -import com.yf.exam.modules.qu.entity.Qu; - -import java.util.List; - -/** -*

-* 问题题目业务类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 13:23 -*/ -public interface QuService extends IService { - - /** - * 分页查询数据 - * @param reqDTO - * @return - */ - IPage paging(PagingReqDTO reqDTO); - - /** - * 删除试题 - * @param ids - */ - void delete(List ids); - - /** - * 随机抽取题库的数据 - * @param repoId - * @param quType - * @param excludes 要排除的ID列表 - * @param size - * @return - */ - List listByRandom(String repoId, - Integer quType, - List excludes, - Integer size); - - /** - * 问题详情 - * @param id - * @return - */ - QuDetailDTO detail(String id); - - /** - * 保存试题 - * @param reqDTO - */ - void save(QuDetailDTO reqDTO); - - /** - * 查找导出列表 - * @param query - * @return - */ - List listForExport(QuQueryReqDTO query); - - /** - * 导入Excel - * @param dtoList - * @return - */ - int importExcel(List dtoList); -} diff --git a/src/main/java/com/guwan/backend/model/qu/service/impl/QuAnswerServiceImpl.java b/src/main/java/com/guwan/backend/model/qu/service/impl/QuAnswerServiceImpl.java deleted file mode 100644 index fc35e7f..0000000 --- a/src/main/java/com/guwan/backend/model/qu/service/impl/QuAnswerServiceImpl.java +++ /dev/null @@ -1,144 +0,0 @@ -package com.guwan.backend.model.qu.service.impl; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.TypeReference; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.yf.exam.core.api.dto.PagingReqDTO; -import com.yf.exam.core.utils.BeanMapper; -import com.yf.exam.modules.qu.dto.QuAnswerDTO; -import com.yf.exam.modules.qu.entity.QuAnswer; -import com.yf.exam.modules.qu.mapper.QuAnswerMapper; -import com.yf.exam.modules.qu.service.QuAnswerService; -import com.yf.exam.modules.qu.utils.ImageCheckUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.util.CollectionUtils; - -import java.util.ArrayList; -import java.util.List; - -/** -*

-* 语言设置 服务实现类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 13:23 -*/ -@Service -public class QuAnswerServiceImpl extends ServiceImpl implements QuAnswerService { - - @Autowired - private ImageCheckUtils imageCheckUtils; - - @Override - public IPage paging(PagingReqDTO reqDTO) { - - //创建分页对象 - IPage query = new Page<>(reqDTO.getCurrent(), reqDTO.getSize()); - - //查询条件 - QueryWrapper wrapper = new QueryWrapper<>(); - - //获得数据 - IPage page = this.page(query, wrapper); - //转换结果 - IPage pageData = JSON.parseObject(JSON.toJSONString(page), new TypeReference>(){}); - return pageData; - } - - @Override - public List listAnswerByRandom(String quId) { - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda().eq(QuAnswer::getQuId, quId); - wrapper.last(" ORDER BY RAND() "); - - return this.list(wrapper); - } - - @Override - public List listByQu(String quId) { - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda().eq(QuAnswer::getQuId, quId); - - List list = this.list(wrapper); - if(!CollectionUtils.isEmpty(list)){ - return BeanMapper.mapList(list, QuAnswerDTO.class); - } - - return null; - } - - - /** - * 查找已存在的列表 - * @param quId - * @return - */ - public List findExistsList(String quId) { - //返回结果 - List ids = new ArrayList<>(); - - QueryWrapper wrapper = new QueryWrapper(); - wrapper.lambda().eq(QuAnswer::getQuId, quId); - List list = this.list(wrapper); - - if (!CollectionUtils.isEmpty(list)) { - for (QuAnswer item : list) { - ids.add(item.getId()); - } - } - return ids; - } - - @Override - public void saveAll(String quId, List list) { - - //最终要保存的列表 - List saveList = new ArrayList<>(); - - //已存在的标签列表 - List ids = this.findExistsList(quId); - - if(!CollectionUtils.isEmpty(list)){ - for(QuAnswerDTO item: list){ - - // 校验图片地址 - imageCheckUtils.checkImage(item.getImage(), "选项图片地址错误!"); - - //标签ID - String id = item.getId(); - QuAnswer answer = new QuAnswer(); - BeanMapper.copy(item, answer); - answer.setQuId(quId); - - //补全ID避免新增 - if(ids.contains(id)){ - ids.remove(id); - } - - saveList.add(answer); - } - - //保存标签列表 - if(!CollectionUtils.isEmpty(saveList)) { - this.saveOrUpdateBatch(saveList); - } - - //删除已移除 - if(!ids.isEmpty()){ - this.removeByIds(ids); - } - }else{ - - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda().eq(QuAnswer::getQuId, quId); - this.remove(wrapper); - } - } - - -} diff --git a/src/main/java/com/guwan/backend/model/qu/service/impl/QuRepoServiceImpl.java b/src/main/java/com/guwan/backend/model/qu/service/impl/QuRepoServiceImpl.java deleted file mode 100644 index be8c56b..0000000 --- a/src/main/java/com/guwan/backend/model/qu/service/impl/QuRepoServiceImpl.java +++ /dev/null @@ -1,175 +0,0 @@ -package com.guwan.backend.model.qu.service.impl; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.TypeReference; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.yf.exam.core.api.dto.PagingReqDTO; -import com.yf.exam.modules.qu.dto.QuRepoDTO; -import com.yf.exam.modules.qu.dto.request.QuRepoBatchReqDTO; -import com.yf.exam.modules.qu.entity.Qu; -import com.yf.exam.modules.qu.entity.QuRepo; -import com.yf.exam.modules.qu.mapper.QuMapper; -import com.yf.exam.modules.qu.mapper.QuRepoMapper; -import com.yf.exam.modules.qu.service.QuRepoService; -import com.yf.exam.modules.repo.service.RepoService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.util.CollectionUtils; - -import java.util.ArrayList; -import java.util.List; - -/** -*

-* 语言设置 服务实现类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-25 13:23 -*/ -@Service -public class QuRepoServiceImpl extends ServiceImpl implements QuRepoService { - - - @Autowired - private QuMapper quMapper; - - @Autowired - private RepoService repoService; - - @Override - public IPage paging(PagingReqDTO reqDTO) { - - //创建分页对象 - IPage query = new Page<>(reqDTO.getCurrent(), reqDTO.getSize()); - - //查询条件 - QueryWrapper wrapper = new QueryWrapper<>(); - - //获得数据 - IPage page = this.page(query, wrapper); - //转换结果 - IPage pageData = JSON.parseObject(JSON.toJSONString(page), new TypeReference>(){}); - return pageData; - } - - @Override - public void saveAll(String quId, Integer quType, List ids) { - // 先删除 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda().eq(QuRepo::getQuId, quId); - this.remove(wrapper); - - // 保存全部 - if(!CollectionUtils.isEmpty(ids)){ - List list = new ArrayList<>(); - for(String id: ids){ - QuRepo ref = new QuRepo(); - ref.setQuId(quId); - ref.setRepoId(id); - ref.setQuType(quType); - list.add(ref); - } - this.saveBatch(list); - - - for(String id: ids){ - this.sortRepo(id); - } - } - - - } - - @Override - public List listByQu(String quId) { - // 先删除 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda().eq(QuRepo::getQuId, quId); - List list = this.list(wrapper); - List ids = new ArrayList<>(); - if(!CollectionUtils.isEmpty(list)){ - for(QuRepo item: list){ - ids.add(item.getRepoId()); - } - } - return ids; - } - - @Override - public List listByRepo(String repoId, Integer quType, boolean rand) { - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda() - .eq(QuRepo::getRepoId, repoId); - - if(quType!=null){ - wrapper.lambda().eq(QuRepo::getQuType, quType); - } - - if(rand){ - wrapper.orderByAsc(" RAND() "); - }else{ - wrapper.lambda().orderByAsc(QuRepo::getSort); - } - - List list = this.list(wrapper); - List ids = new ArrayList<>(); - if(!CollectionUtils.isEmpty(list)){ - for(QuRepo item: list){ - ids.add(item.getQuId()); - } - } - return ids; - } - - @Override - public void batchAction(QuRepoBatchReqDTO reqDTO) { - - // 移除的 - if(reqDTO.getRemove()!=null && reqDTO.getRemove()){ - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda() - .in(QuRepo::getRepoId, reqDTO.getRepoIds()) - .in(QuRepo::getQuId, reqDTO.getQuIds()); - this.remove(wrapper); - }else{ - - // 新增的 - for(String quId : reqDTO.getQuIds()){ - Qu q = quMapper.selectById(quId); - this.saveAll(quId, q.getQuType(), reqDTO.getRepoIds()); - } - } - - for(String id: reqDTO.getRepoIds()){ - this.sortRepo(id); - } - - } - - - /** - * 单个题库进行排序 - * @param repoId - */ - private void sortRepo(String repoId){ - - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda().eq(QuRepo::getRepoId, repoId); - - List list = this.list(wrapper); - if(CollectionUtils.isEmpty(list)){ - return; - } - - int sort = 1; - for(QuRepo item: list){ - item.setSort(sort); - sort++; - } - this.updateBatchById(list); - } -} diff --git a/src/main/java/com/guwan/backend/model/qu/service/impl/QuServiceImpl.java b/src/main/java/com/guwan/backend/model/qu/service/impl/QuServiceImpl.java deleted file mode 100644 index 969c7cf..0000000 --- a/src/main/java/com/guwan/backend/model/qu/service/impl/QuServiceImpl.java +++ /dev/null @@ -1,277 +0,0 @@ -package com.guwan.backend.model.qu.service.impl; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.yf.exam.core.api.dto.PagingReqDTO; -import com.yf.exam.core.exception.ServiceException; -import com.yf.exam.core.utils.BeanMapper; -import com.yf.exam.modules.qu.dto.QuAnswerDTO; -import com.yf.exam.modules.qu.dto.QuDTO; -import com.yf.exam.modules.qu.dto.export.QuExportDTO; -import com.yf.exam.modules.qu.dto.ext.QuDetailDTO; -import com.yf.exam.modules.qu.dto.request.QuQueryReqDTO; -import com.yf.exam.modules.qu.entity.Qu; -import com.yf.exam.modules.qu.entity.QuAnswer; -import com.yf.exam.modules.qu.entity.QuRepo; -import com.yf.exam.modules.qu.enums.QuType; -import com.yf.exam.modules.qu.mapper.QuMapper; -import com.yf.exam.modules.qu.service.QuAnswerService; -import com.yf.exam.modules.qu.service.QuRepoService; -import com.yf.exam.modules.qu.service.QuService; -import com.yf.exam.modules.qu.utils.ImageCheckUtils; -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.util.StringUtils; - -import java.util.*; - -/** - *

- * 语言设置 服务实现类 - *

- * - * @author 聪明笨狗 - * @since 2020-05-25 10:17 - */ -@Service -public class QuServiceImpl extends ServiceImpl implements QuService { - - @Autowired - private QuAnswerService quAnswerService; - - @Autowired - private QuRepoService quRepoService; - - @Autowired - private ImageCheckUtils imageCheckUtils; - - @Override - public IPage paging(PagingReqDTO reqDTO) { - - //创建分页对象 - Page page = new Page<>(reqDTO.getCurrent(), reqDTO.getSize()); - - //转换结果 - IPage pageData = baseMapper.paging(page, reqDTO.getParams()); - return pageData; - } - - @Transactional(rollbackFor = Exception.class) - @Override - public void delete(List ids) { - // 移除题目 - this.removeByIds(ids); - - // 移除选项 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda().in(QuAnswer::getQuId, ids); - quAnswerService.remove(wrapper); - - // 移除题库绑定 - QueryWrapper wrapper1 = new QueryWrapper<>(); - wrapper1.lambda().in(QuRepo::getQuId, ids); - quRepoService.remove(wrapper1); - } - - @Override - public List listByRandom(String repoId, Integer quType, List excludes, Integer size) { - return baseMapper.listByRandom(repoId, quType, excludes, size); - } - - @Override - public QuDetailDTO detail(String id) { - - QuDetailDTO respDTO = new QuDetailDTO(); - Qu qu = this.getById(id); - BeanMapper.copy(qu, respDTO); - - List answerList = quAnswerService.listByQu(id); - respDTO.setAnswerList(answerList); - - List repoIds = quRepoService.listByQu(id); - respDTO.setRepoIds(repoIds); - - return respDTO; - } - - - @Transactional(rollbackFor = Exception.class) - @Override - public void save(QuDetailDTO reqDTO) { - - - // 校验数据 - this.checkData(reqDTO, ""); - - Qu qu = new Qu(); - BeanMapper.copy(reqDTO, qu); - - // 校验图片地址 - imageCheckUtils.checkImage(qu.getImage(), "题干图片地址错误!"); - - // 更新 - this.saveOrUpdate(qu); - - // 保存全部问题 - quAnswerService.saveAll(qu.getId(), reqDTO.getAnswerList()); - - // 保存到题库 - quRepoService.saveAll(qu.getId(), qu.getQuType(), reqDTO.getRepoIds()); - - } - - @Override - public List listForExport(QuQueryReqDTO query) { - return baseMapper.listForExport(query); - } - - @Override - public int importExcel(List dtoList) { - - //根据题目名称分组 - Map> anMap = new HashMap<>(16); - - //题目本体信息 - Map quMap = new HashMap<>(16); - - //数据分组 - for (QuExportDTO item : dtoList) { - - // 空白的ID - if (StringUtils.isEmpty(item.getNo())) { - continue; - } - - Integer key; - //序号 - try { - key = Integer.parseInt(item.getNo()); - } catch (Exception e) { - continue; - } - - //如果已经有题目了,直接处理选项 - if (anMap.containsKey(key)) { - anMap.get(key).add(item); - } else { - //如果没有,将题目内容和选项一起 - List subList = new ArrayList<>(); - subList.add(item); - anMap.put(key, subList); - quMap.put(key, item); - } - } - - int count = 0; - try { - - //循环题目插入 - for (Integer key : quMap.keySet()) { - - QuExportDTO im = quMap.get(key); - - //题目基本信息 - QuDetailDTO qu = new QuDetailDTO(); - qu.setContent(im.getQContent()); - qu.setAnalysis(im.getQAnalysis()); - qu.setQuType(Integer.parseInt(im.getQuType())); - qu.setCreateTime(new Date()); - - //设置回答列表 - List answerList = this.processAnswerList(anMap.get(key)); - //设置题目 - qu.setAnswerList(answerList); - //设置引用题库 - qu.setRepoIds(im.getRepoList()); - // 保存答案 - this.save(qu); - count++; - } - - } catch (ServiceException e) { - e.printStackTrace(); - throw new ServiceException(1, "导入出现问题,行:" + count + "," + e.getMessage()); - } - - return count; - } - - /** - * 处理回答列表 - * - * @param importList - * @return - */ - private List processAnswerList(List importList) { - - List list = new ArrayList<>(16); - for (QuExportDTO item : importList) { - QuAnswerDTO a = new QuAnswerDTO(); - a.setIsRight("1".equals(item.getAIsRight())); - a.setContent(item.getAContent()); - a.setAnalysis(item.getAAnalysis()); - a.setId(""); - list.add(a); - } - return list; - } - - /** - * 校验题目信息 - * - * @param qu - * @param no - * @throws Exception - */ - public void checkData(QuDetailDTO qu, String no) { - - - if (StringUtils.isEmpty(qu.getContent())) { - throw new ServiceException(1, no + "题目内容不能为空!"); - } - - - if (CollectionUtils.isEmpty(qu.getRepoIds())) { - throw new ServiceException(1, no + "至少要选择一个题库!"); - } - - List answers = qu.getAnswerList(); - - - if (CollectionUtils.isEmpty(answers)) { - throw new ServiceException(1, no + "客观题至少要包含一个备选答案!"); - } - - - int trueCount = 0; - for (QuAnswerDTO a : answers) { - - if (a.getIsRight() == null) { - throw new ServiceException(1, no + "必须定义选项是否正确项!"); - } - - if (StringUtils.isEmpty(a.getContent())) { - throw new ServiceException(1, no + "选项内容不为空!"); - } - - if (a.getIsRight()) { - trueCount += 1; - } - } - - if (trueCount == 0) { - throw new ServiceException(1, no + "至少要包含一个正确项!"); - } - - - //单选题 - if (qu.getQuType().equals(QuType.RADIO) && trueCount > 1) { - throw new ServiceException(1, no + "单选题不能包含多个正确项!"); - } - - } -} diff --git a/src/main/java/com/guwan/backend/model/qu/utils/ImageCheckUtils.java b/src/main/java/com/guwan/backend/model/qu/utils/ImageCheckUtils.java deleted file mode 100644 index 4fd3ae6..0000000 --- a/src/main/java/com/guwan/backend/model/qu/utils/ImageCheckUtils.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.guwan.backend.model.qu.utils; - -import com.yf.exam.ability.upload.config.UploadConfig; -import com.yf.exam.core.exception.ServiceException; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Component -public class ImageCheckUtils { - - @Autowired - private UploadConfig conf; - - /** - * 进行图片校验! - * @param image - * @param throwMsg - */ - public void checkImage(String image, String throwMsg) { - - if(StringUtils.isBlank(image)){ - return; - } - - // 校验图片地址 - if(!image.startsWith(conf.getUrl())){ - throw new ServiceException(throwMsg); - } - } -} diff --git a/src/main/java/com/guwan/backend/model/sys/config/controller/SysConfigController.java b/src/main/java/com/guwan/backend/model/sys/config/controller/SysConfigController.java deleted file mode 100644 index f03d57d..0000000 --- a/src/main/java/com/guwan/backend/model/sys/config/controller/SysConfigController.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.guwan.backend.model.sys.config.controller; - -import com.yf.exam.core.api.ApiRest; -import com.yf.exam.core.api.controller.BaseController; -import com.yf.exam.core.api.dto.BaseIdRespDTO; -import com.yf.exam.core.utils.BeanMapper; -import com.yf.exam.modules.qu.utils.ImageCheckUtils; -import com.yf.exam.modules.sys.config.dto.SysConfigDTO; -import com.yf.exam.modules.sys.config.entity.SysConfig; -import com.yf.exam.modules.sys.config.service.SysConfigService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.apache.shiro.authz.annotation.RequiresRoles; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -/** -*

-* 通用配置控制器 -*

-* -* @author 聪明笨狗 -* @since 2020-04-17 09:12 -*/ -@Api(tags={"通用配置"}) -@RestController -@RequestMapping("/exam/api/sys/config") -public class SysConfigController extends BaseController { - - @Autowired - private SysConfigService baseService; - - @Autowired - private ImageCheckUtils imageCheckUtils; - - /** - * 添加或修改 - * @param reqDTO - * @return - */ - @RequiresRoles("sa") - @ApiOperation(value = "添加或修改") - @RequestMapping(value = "/save", method = { RequestMethod.POST}) - public ApiRest save(@RequestBody SysConfigDTO reqDTO) { - - //复制参数 - SysConfig entity = new SysConfig(); - BeanMapper.copy(reqDTO, entity); - - // 校验图片地址 - imageCheckUtils.checkImage(entity.getBackLogo(), "系统LOGO地址错误!"); - - baseService.saveOrUpdate(entity); - return super.success(new BaseIdRespDTO(entity.getId())); - } - - /** - * 查找详情 - * @return - */ - @ApiOperation(value = "查找详情") - @RequestMapping(value = "/detail", method = { RequestMethod.POST}) - public ApiRest find() { - SysConfigDTO dto = baseService.find(); - return super.success(dto); - } -} diff --git a/src/main/java/com/guwan/backend/model/sys/config/dto/SysConfigDTO.java b/src/main/java/com/guwan/backend/model/sys/config/dto/SysConfigDTO.java deleted file mode 100644 index d0496f2..0000000 --- a/src/main/java/com/guwan/backend/model/sys/config/dto/SysConfigDTO.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.guwan.backend.model.sys.config.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; - -/** -*

-* 通用配置请求类 -*

-* -* @author 聪明笨狗 -* @since 2020-04-17 09:12 -*/ -@Data -@ApiModel(value="通用配置", description="通用配置") -public class SysConfigDTO implements Serializable { - - private static final long serialVersionUID = 1L; - - - @ApiModelProperty(value = "ID", required=true) - private String id; - - @ApiModelProperty(value = "系统名称") - private String siteName; - - @ApiModelProperty(value = "前端LOGO") - private String frontLogo; - - @ApiModelProperty(value = "后台LOGO") - private String backLogo; - - @ApiModelProperty(value = "版权信息") - private String copyRight; - -} diff --git a/src/main/java/com/guwan/backend/model/sys/config/entity/SysConfig.java b/src/main/java/com/guwan/backend/model/sys/config/entity/SysConfig.java deleted file mode 100644 index cddfc42..0000000 --- a/src/main/java/com/guwan/backend/model/sys/config/entity/SysConfig.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.guwan.backend.model.sys.config.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.extension.activerecord.Model; -import lombok.Data; - -/** -*

-* 通用配置实体类 -*

-* -* @author 聪明笨狗 -* @since 2020-04-17 09:12 -*/ -@Data -@TableName("sys_config") -public class SysConfig extends Model { - - private static final long serialVersionUID = 1L; - - /** - * ID - */ - @TableId(value = "id", type = IdType.ASSIGN_ID) - private String id; - - /** - * 系统名称 - */ - @TableField("site_name") - private String siteName; - - /** - * 前端LOGO - */ - @TableField("front_logo") - private String frontLogo; - - /** - * 后台LOGO - */ - @TableField("back_logo") - private String backLogo; - - /** - * 版权信息 - */ - @TableField("copy_right") - private String copyRight; -} diff --git a/src/main/java/com/guwan/backend/model/sys/config/mapper/SysConfigMapper.java b/src/main/java/com/guwan/backend/model/sys/config/mapper/SysConfigMapper.java deleted file mode 100644 index 812a982..0000000 --- a/src/main/java/com/guwan/backend/model/sys/config/mapper/SysConfigMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.guwan.backend.model.sys.config.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yf.exam.modules.sys.config.entity.SysConfig; - -/** -*

-* 通用配置Mapper -*

-* -* @author 聪明笨狗 -* @since 2020-04-17 09:12 -*/ -public interface SysConfigMapper extends BaseMapper { - -} diff --git a/src/main/java/com/guwan/backend/model/sys/config/service/SysConfigService.java b/src/main/java/com/guwan/backend/model/sys/config/service/SysConfigService.java deleted file mode 100644 index 6cc91af..0000000 --- a/src/main/java/com/guwan/backend/model/sys/config/service/SysConfigService.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.guwan.backend.model.sys.config.service; - -import com.baomidou.mybatisplus.extension.service.IService; -import com.yf.exam.modules.sys.config.dto.SysConfigDTO; -import com.yf.exam.modules.sys.config.entity.SysConfig; - -/** -*

-* 通用配置业务类 -*

-* -* @author 聪明笨狗 -* @since 2020-04-17 09:12 -*/ -public interface SysConfigService extends IService { - - /** - * 查找配置信息 - * @return - */ - SysConfigDTO find(); -} diff --git a/src/main/java/com/guwan/backend/model/sys/config/service/impl/SysConfigServiceImpl.java b/src/main/java/com/guwan/backend/model/sys/config/service/impl/SysConfigServiceImpl.java deleted file mode 100644 index 36c0502..0000000 --- a/src/main/java/com/guwan/backend/model/sys/config/service/impl/SysConfigServiceImpl.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.guwan.backend.model.sys.config.service.impl; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.yf.exam.core.utils.BeanMapper; -import com.yf.exam.modules.sys.config.dto.SysConfigDTO; -import com.yf.exam.modules.sys.config.entity.SysConfig; -import com.yf.exam.modules.sys.config.mapper.SysConfigMapper; -import com.yf.exam.modules.sys.config.service.SysConfigService; -import org.springframework.stereotype.Service; - -/** -*

-* 语言设置 服务实现类 -*

-* -* @author 聪明笨狗 -* @since 2020-04-17 09:12 -*/ -@Service -public class SysConfigServiceImpl extends ServiceImpl implements SysConfigService { - - @Override - public SysConfigDTO find() { - - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.last(" LIMIT 1"); - - SysConfig entity = this.getOne(wrapper, false); - SysConfigDTO dto = new SysConfigDTO(); - BeanMapper.copy(entity, dto); - return dto; - } -} diff --git a/src/main/java/com/guwan/backend/model/sys/depart/controller/SysDepartController.java b/src/main/java/com/guwan/backend/model/sys/depart/controller/SysDepartController.java deleted file mode 100644 index 3450288..0000000 --- a/src/main/java/com/guwan/backend/model/sys/depart/controller/SysDepartController.java +++ /dev/null @@ -1,150 +0,0 @@ -package com.guwan.backend.model.sys.depart.controller; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.yf.exam.core.api.ApiRest; -import com.yf.exam.core.api.controller.BaseController; -import com.yf.exam.core.api.dto.BaseIdReqDTO; -import com.yf.exam.core.api.dto.BaseIdsReqDTO; -import com.yf.exam.core.api.dto.PagingReqDTO; -import com.yf.exam.core.utils.BeanMapper; -import com.yf.exam.modules.sys.depart.dto.SysDepartDTO; -import com.yf.exam.modules.sys.depart.dto.request.DepartSortReqDTO; -import com.yf.exam.modules.sys.depart.dto.response.SysDepartTreeDTO; -import com.yf.exam.modules.sys.depart.entity.SysDepart; -import com.yf.exam.modules.sys.depart.service.SysDepartService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.apache.shiro.authz.annotation.RequiresRoles; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; - -/** -*

-* 部门信息控制器 -*

-* -* @author 聪明笨狗 -* @since 2020-09-02 17:25 -*/ -@Api(tags={"部门信息"}) -@RestController -@RequestMapping("/exam/api/sys/depart") -public class SysDepartController extends BaseController { - - @Autowired - private SysDepartService baseService; - - /** - * 添加或修改 - * @param reqDTO - * @return - */ - @RequiresRoles("sa") - @ApiOperation(value = "添加或修改") - @RequestMapping(value = "/save", method = { RequestMethod.POST}) - public ApiRest save(@RequestBody SysDepartDTO reqDTO) { - baseService.save(reqDTO); - return super.success(); - } - - /** - * 批量删除 - * @param reqDTO - * @return - */ - @RequiresRoles("sa") - @ApiOperation(value = "批量删除") - @RequestMapping(value = "/delete", method = { RequestMethod.POST}) - public ApiRest edit(@RequestBody BaseIdsReqDTO reqDTO) { - //根据ID删除 - baseService.removeByIds(reqDTO.getIds()); - return super.success(); - } - - /** - * 查找详情 - * @param reqDTO - * @return - */ - @RequiresRoles("sa") - @ApiOperation(value = "查找详情") - @RequestMapping(value = "/detail", method = { RequestMethod.POST}) - public ApiRest find(@RequestBody BaseIdReqDTO reqDTO) { - SysDepart entity = baseService.getById(reqDTO.getId()); - SysDepartDTO dto = new SysDepartDTO(); - BeanUtils.copyProperties(entity, dto); - return super.success(dto); - } - - /** - * 分页查找 - * @param reqDTO - * @return - */ - @RequiresRoles("sa") - @ApiOperation(value = "分页查找") - @RequestMapping(value = "/paging", method = { RequestMethod.POST}) - public ApiRest> paging(@RequestBody PagingReqDTO reqDTO) { - - //分页查询并转换 - IPage page = baseService.paging(reqDTO); - - return super.success(page); - } - - /** - * 查找列表,每次最多返回200条数据 - * @param reqDTO - * @return - */ - @RequiresRoles("sa") - @ApiOperation(value = "查找列表") - @RequestMapping(value = "/list", method = { RequestMethod.POST}) - public ApiRest> list(@RequestBody SysDepartDTO reqDTO) { - - //分页查询并转换 - QueryWrapper wrapper = new QueryWrapper<>(); - - //转换并返回 - List list = baseService.list(wrapper); - - //转换数据 - List dtoList = BeanMapper.mapList(list, SysDepartDTO.class); - - return super.success(dtoList); - } - - - /** - * 树列表 - * @return - */ - @RequiresRoles("sa") - @ApiOperation(value = "树列表") - @RequestMapping(value = "/tree", method = { RequestMethod.POST}) - public ApiRest> tree() { - List dtoList = baseService.findTree(); - return super.success(dtoList); - } - - - /** - * 分类排序 - * @param reqDTO - * @return - */ - @RequiresRoles("sa") - @ApiOperation(value = "分类排序") - @RequestMapping(value = "/sort", method = { RequestMethod.POST}) - public ApiRest sort(@RequestBody DepartSortReqDTO reqDTO) { - baseService.sort(reqDTO.getId(), reqDTO.getSort()); - return super.success(); - } -} diff --git a/src/main/java/com/guwan/backend/model/sys/depart/dto/SysDepartDTO.java b/src/main/java/com/guwan/backend/model/sys/depart/dto/SysDepartDTO.java deleted file mode 100644 index 148119c..0000000 --- a/src/main/java/com/guwan/backend/model/sys/depart/dto/SysDepartDTO.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.guwan.backend.model.sys.depart.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; - -/** -*

-* 部门信息数据传输类 -*

-* -* @author 聪明笨狗 -* @since 2020-09-02 17:25 -*/ -@Data -@ApiModel(value="部门信息", description="部门信息") -public class SysDepartDTO implements Serializable { - - private static final long serialVersionUID = 1L; - - - @ApiModelProperty(value = "ID", required=true) - private String id; - - @ApiModelProperty(value = "1公司2部门", required=true) - private Integer deptType; - - @ApiModelProperty(value = "所属上级", required=true) - private String parentId; - - @ApiModelProperty(value = "部门名称", required=true) - private String deptName; - - @ApiModelProperty(value = "部门编码", required=true) - private String deptCode; - - @ApiModelProperty(value = "排序", required=true) - private Integer sort; - -} diff --git a/src/main/java/com/guwan/backend/model/sys/depart/dto/request/DepartSortReqDTO.java b/src/main/java/com/guwan/backend/model/sys/depart/dto/request/DepartSortReqDTO.java deleted file mode 100644 index 6e5def3..0000000 --- a/src/main/java/com/guwan/backend/model/sys/depart/dto/request/DepartSortReqDTO.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.guwan.backend.model.sys.depart.dto.request; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; - -/** -*

-* 部门排序请求类 -*

-* -* @author 聪明笨狗 -* @since 2020-03-14 10:37 -*/ -@Data -@ApiModel(value="部门排序请求类", description="部门排序请求类") -public class DepartSortReqDTO implements Serializable { - - private static final long serialVersionUID = 1L; - - @ApiModelProperty(value = "分类ID") - private String id; - - @ApiModelProperty(value = "排序,0下降,1上升") - private Integer sort; -} diff --git a/src/main/java/com/guwan/backend/model/sys/depart/dto/response/SysDepartTreeDTO.java b/src/main/java/com/guwan/backend/model/sys/depart/dto/response/SysDepartTreeDTO.java deleted file mode 100644 index c6215d1..0000000 --- a/src/main/java/com/guwan/backend/model/sys/depart/dto/response/SysDepartTreeDTO.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.guwan.backend.model.sys.depart.dto.response; - -import com.yf.exam.modules.sys.depart.dto.SysDepartDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** -*

-* 部门树结构响应类 -*

-* -* @author 聪明笨狗 -* @since 2020-09-02 17:25 -*/ -@Data -@ApiModel(value="部门树结构响应类", description="部门树结构响应类") -public class SysDepartTreeDTO extends SysDepartDTO { - - private static final long serialVersionUID = 1L; - - @ApiModelProperty(value = "子列表", required=true) - private List children; - - -} diff --git a/src/main/java/com/guwan/backend/model/sys/depart/entity/SysDepart.java b/src/main/java/com/guwan/backend/model/sys/depart/entity/SysDepart.java deleted file mode 100644 index 4c3aa37..0000000 --- a/src/main/java/com/guwan/backend/model/sys/depart/entity/SysDepart.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.guwan.backend.model.sys.depart.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.extension.activerecord.Model; -import lombok.Data; - -/** -*

-* 部门信息实体类 -*

-* -* @author 聪明笨狗 -* @since 2020-09-02 17:25 -*/ -@Data -@TableName("sys_depart") -public class SysDepart extends Model { - - private static final long serialVersionUID = 1L; - - /** - * ID - */ - @TableId(value = "id", type = IdType.ASSIGN_ID) - private String id; - - /** - * 1公司2部门 - */ - @TableField("dept_type") - private Integer deptType; - - /** - * 所属上级 - */ - @TableField("parent_id") - private String parentId; - - /** - * 部门名称 - */ - @TableField("dept_name") - private String deptName; - - /** - * 部门编码 - */ - @TableField("dept_code") - private String deptCode; - - /** - * 排序 - */ - private Integer sort; - -} diff --git a/src/main/java/com/guwan/backend/model/sys/depart/mapper/SysDepartMapper.java b/src/main/java/com/guwan/backend/model/sys/depart/mapper/SysDepartMapper.java deleted file mode 100644 index c987057..0000000 --- a/src/main/java/com/guwan/backend/model/sys/depart/mapper/SysDepartMapper.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.guwan.backend.model.sys.depart.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.yf.exam.modules.sys.depart.dto.SysDepartDTO; -import com.yf.exam.modules.sys.depart.dto.response.SysDepartTreeDTO; -import com.yf.exam.modules.sys.depart.entity.SysDepart; -import org.apache.ibatis.annotations.Param; - -/** -*

-* 部门信息Mapper -*

-* -* @author 聪明笨狗 -* @since 2020-09-02 17:25 -*/ -public interface SysDepartMapper extends BaseMapper { - - /** - * 部门树分页 - * @param page - * @param query - * @return - */ - IPage paging(Page page, @Param("query") SysDepartDTO query); -} diff --git a/src/main/java/com/guwan/backend/model/sys/depart/service/SysDepartService.java b/src/main/java/com/guwan/backend/model/sys/depart/service/SysDepartService.java deleted file mode 100644 index 19467f9..0000000 --- a/src/main/java/com/guwan/backend/model/sys/depart/service/SysDepartService.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.guwan.backend.model.sys.depart.service; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.service.IService; -import com.yf.exam.core.api.dto.PagingReqDTO; -import com.yf.exam.modules.sys.depart.dto.SysDepartDTO; -import com.yf.exam.modules.sys.depart.dto.response.SysDepartTreeDTO; -import com.yf.exam.modules.sys.depart.entity.SysDepart; - -import java.util.List; - -/** -*

-* 部门信息业务类 -*

-* -* @author 聪明笨狗 -* @since 2020-09-02 17:25 -*/ -public interface SysDepartService extends IService { - - /** - * 保存 - * @param reqDTO - */ - void save(SysDepartDTO reqDTO); - - /** - * 分页查询数据 - * @param reqDTO - * @return - */ - IPage paging(PagingReqDTO reqDTO); - - /** - * 查找部门树结构 - * @return - */ - List findTree(); - - /** - * 查找部门树 - * @param ids - * @return - */ - List findTree(List ids); - - /** - * 排序 - * @param id - * @param sort - */ - void sort(String id, Integer sort); - - - /** - * 获取某个部门ID下的所有子部门ID - * @param id - * @return - */ - List listAllSubIds( String id); -} diff --git a/src/main/java/com/guwan/backend/model/sys/depart/service/impl/SysDepartServiceImpl.java b/src/main/java/com/guwan/backend/model/sys/depart/service/impl/SysDepartServiceImpl.java deleted file mode 100644 index 1ded455..0000000 --- a/src/main/java/com/guwan/backend/model/sys/depart/service/impl/SysDepartServiceImpl.java +++ /dev/null @@ -1,288 +0,0 @@ -package com.guwan.backend.model.sys.depart.service.impl; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.yf.exam.core.api.dto.PagingReqDTO; -import com.yf.exam.core.utils.BeanMapper; -import com.yf.exam.modules.sys.depart.dto.SysDepartDTO; -import com.yf.exam.modules.sys.depart.dto.response.SysDepartTreeDTO; -import com.yf.exam.modules.sys.depart.entity.SysDepart; -import com.yf.exam.modules.sys.depart.mapper.SysDepartMapper; -import com.yf.exam.modules.sys.depart.service.SysDepartService; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; -import org.springframework.util.CollectionUtils; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** -*

-* 部门信息业务实现类 -*

-* -* @author 聪明笨狗 -* @since 2020-09-02 17:25 -*/ -@Service -public class SysDepartServiceImpl extends ServiceImpl implements SysDepartService { - - - /** - * 0标识为顶级分类 - */ - private static final String ROOT_TAG = "0"; - - - @Override - public void save(SysDepartDTO reqDTO) { - - if(StringUtils.isBlank(reqDTO.getId())) { - this.fillCode(reqDTO); - }else{ - reqDTO.setSort(null); - reqDTO.setDeptCode(null); - } - - SysDepart entity = new SysDepart(); - BeanMapper.copy(reqDTO, entity); - this.saveOrUpdate(entity); - } - - @Override - public IPage paging(PagingReqDTO reqDTO) { - - // 创建分页对象 - Page query = new Page(reqDTO.getCurrent(), reqDTO.getSize()); - - // 请求参数 - SysDepartDTO params = reqDTO.getParams(); - - //转换结果 - IPage pageData = baseMapper.paging(query, params); - - return pageData; - } - - - @Override - public List findTree() { - return this.findTree(null); - } - - @Override - public List findTree(List ids) { - - - QueryWrapper wrapper = new QueryWrapper(); - wrapper.lambda().orderByAsc(SysDepart::getSort); - - if(!CollectionUtils.isEmpty(ids)){ - - List fullIds = new ArrayList<>(); - for(String id: ids){ - this.cycleAllParent(fullIds, id); - } - - if(!CollectionUtils.isEmpty(fullIds)){ - wrapper.lambda().in(SysDepart::getId, fullIds); - } - } - - //全部列表 - List list = this.list(wrapper); - List dtoList = BeanMapper.mapList(list, SysDepartTreeDTO.class); - - //子结构的列表 - Map> map = new HashMap<>(16); - - for(SysDepartTreeDTO item: dtoList){ - - //如果存在 - if(map.containsKey(item.getParentId())){ - map.get(item.getParentId()).add(item); - continue; - } - - //增加新的结构 - List a = new ArrayList<>(); - a.add(item); - map.put(item.getParentId(), a); - } - - //注意,第0级为顶级的 - List topList = map.get(ROOT_TAG); - if(!CollectionUtils.isEmpty(topList)){ - for(SysDepartTreeDTO item: topList){ - this.fillChildren(map, item); - } - } - - return topList; - } - - @Override - public void sort(String id, Integer sort) { - - SysDepart depart = this.getById(id); - SysDepart exchange = null; - - QueryWrapper wrapper = new QueryWrapper<>(); - // 同级排序 - wrapper.lambda() - .eq(SysDepart::getParentId, depart.getParentId()); - wrapper.last("LIMIT 1"); - - // 上升 - if(sort == 0){ - // 同级排序 - wrapper.lambda() - .lt(SysDepart::getSort, depart.getSort()) - .orderByDesc(SysDepart::getSort); - exchange = this.getOne(wrapper, false); - } - - // 下降 - if(sort == 1){ - // 同级排序 - wrapper.lambda() - .gt(SysDepart::getSort, depart.getSort()) - .orderByAsc(SysDepart::getSort); - exchange = this.getOne(wrapper, false); - } - - - if(exchange!=null) { - SysDepart a = new SysDepart(); - a.setId(id); - a.setSort(exchange.getSort()); - SysDepart b = new SysDepart(); - b.setId(exchange.getId()); - b.setSort(depart.getSort()); - this.updateById(a); - this.updateById(b); - } - } - - /** - * 获取部门编号 - * @param reqDTO - * @return - */ - private void fillCode(SysDepartDTO reqDTO){ - - // 前缀 - String code = ""; - - if(StringUtils.isNotBlank(reqDTO.getParentId()) - && !ROOT_TAG.equals(reqDTO.getParentId())){ - SysDepart parent = this.getById(reqDTO.getParentId()); - code = parent.getDeptCode(); - } - - QueryWrapper wrapper = new QueryWrapper<>(); - - // 同级排序 - wrapper.lambda() - .eq(SysDepart::getParentId, reqDTO.getParentId()) - .orderByDesc(SysDepart::getSort); - wrapper.last("LIMIT 1"); - SysDepart depart = this.getOne(wrapper, false); - - if(depart !=null){ - code += this.formatCode(depart.getSort()+1); - reqDTO.setSort(depart.getSort()+1); - }else{ - code += this.formatCode(1); - reqDTO.setSort(1); - } - - reqDTO.setDeptCode(code); - } - - /** - * 根式化加0 - * @param sort - * @return - */ - private String formatCode(Integer sort){ - if(sort < 10){ - return "A0"+sort; - } - return "A"+sort; - } - - /** - * 递归去做填充数据 - * @param map - * @param item - */ - private void fillChildren(Map> map, SysDepartTreeDTO item){ - - //设置子类 - if(map.containsKey(item.getId())){ - - List children = map.get(item.getId()); - if(!CollectionUtils.isEmpty(children)){ - for(SysDepartTreeDTO sub: children){ - this.fillChildren(map, sub); - } - } - item.setChildren(children); - } - } - - - @Override - public List listAllSubIds( String id){ - - List ids = new ArrayList<>(); - this.cycleAllSubs(ids, id); - return ids; - } - - - /** - * 递归所有子级别ID - * @param list - * @param id - */ - private void cycleAllSubs(List list, String id){ - - // 添加ID - list.add(id); - - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda() - .eq(SysDepart::getParentId, id) - .orderByDesc(SysDepart::getSort); - List subList = this.list(wrapper); - if(!CollectionUtils.isEmpty(subList)){ - for(SysDepart item: subList){ - this.cycleAllSubs(list, item.getId()); - } - } - } - - /** - * 递归所有子级别ID - * @param list - * @param id - */ - private void cycleAllParent(List list, String id){ - - // 往上递归获得父类 - list.add(id); - SysDepart depart = this.getById(id); - - if(StringUtils.isNotBlank(depart.getParentId()) - && !ROOT_TAG.equals(depart.getParentId())){ - this.cycleAllParent(list, depart.getParentId()); - } - - } -} diff --git a/src/main/java/com/guwan/backend/model/sys/system/mapper/SysDictMapper.java b/src/main/java/com/guwan/backend/model/sys/system/mapper/SysDictMapper.java deleted file mode 100644 index d9dd5cc..0000000 --- a/src/main/java/com/guwan/backend/model/sys/system/mapper/SysDictMapper.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.guwan.backend.model.sys.system.mapper; - -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; - -/** -*

-* 机主信息Mapper -*

-* -* @author 聪明笨狗 -* @since 2020-08-22 13:46 -*/ -@Mapper -public interface SysDictMapper { - - /** - * 查找数据字典 - * @param table - * @param text - * @param key - * @param value - * @return - */ - String findDict(@Param("table") String table, - @Param("text") String text, - @Param("key") String key, - @Param("value") String value); -} diff --git a/src/main/java/com/guwan/backend/model/sys/system/service/SysDictService.java b/src/main/java/com/guwan/backend/model/sys/system/service/SysDictService.java deleted file mode 100644 index 02093d9..0000000 --- a/src/main/java/com/guwan/backend/model/sys/system/service/SysDictService.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.guwan.backend.model.sys.system.service; - -/** - * 数据字典工具类 - * @author bool - */ -public interface SysDictService { - - /** - * 查找数据字典 - * @param table - * @param text - * @param key - * @param value - * @return - */ - String findDict(String table, - String text, - String key, - String value); -} diff --git a/src/main/java/com/guwan/backend/model/sys/system/service/impl/SysDictServiceImpl.java b/src/main/java/com/guwan/backend/model/sys/system/service/impl/SysDictServiceImpl.java deleted file mode 100644 index d200625..0000000 --- a/src/main/java/com/guwan/backend/model/sys/system/service/impl/SysDictServiceImpl.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.guwan.backend.model.sys.system.service.impl; - -import com.yf.exam.modules.sys.system.mapper.SysDictMapper; -import com.yf.exam.modules.sys.system.service.SysDictService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -/** - * @author bool - */ -@Service -public class SysDictServiceImpl implements SysDictService { - - @Autowired - private SysDictMapper sysDictMapper; - - @Override - public String findDict(String table, String text, String key, String value) { - return sysDictMapper.findDict(table, text, key, value); - } -} diff --git a/src/main/java/com/guwan/backend/model/sys/user/controller/SysRoleController.java b/src/main/java/com/guwan/backend/model/sys/user/controller/SysRoleController.java deleted file mode 100644 index 280cd04..0000000 --- a/src/main/java/com/guwan/backend/model/sys/user/controller/SysRoleController.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.guwan.backend.model.sys.user.controller; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.yf.exam.core.api.ApiRest; -import com.yf.exam.core.api.controller.BaseController; -import com.yf.exam.core.api.dto.PagingReqDTO; -import com.yf.exam.core.utils.BeanMapper; -import com.yf.exam.modules.sys.user.dto.SysRoleDTO; -import com.yf.exam.modules.sys.user.entity.SysRole; -import com.yf.exam.modules.sys.user.service.SysRoleService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.apache.shiro.authz.annotation.RequiresRoles; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; - -/** - *

- * 管理用户控制器 - *

- * - * @author 聪明笨狗 - * @since 2020-04-13 16:57 - */ -@Api(tags = {"管理用户"}) -@RestController -@RequestMapping("/exam/api/sys/role") -public class SysRoleController extends BaseController { - - @Autowired - private SysRoleService baseService; - - - - - /** - * 分页查找 - * @param reqDTO - * @return - */ - @RequiresRoles("sa") - @ApiOperation(value = "分页查找") - @RequestMapping(value = "/paging", method = { RequestMethod.POST}) - public ApiRest> paging(@RequestBody PagingReqDTO reqDTO) { - - //分页查询并转换 - IPage page = baseService.paging(reqDTO); - return super.success(page); - } - - /** - * 查找列表,每次最多返回200条数据 - * @return - */ - @RequiresRoles("sa") - @ApiOperation(value = "查找列表") - @RequestMapping(value = "/list", method = { RequestMethod.POST}) - public ApiRest> list() { - - //分页查询并转换 - QueryWrapper wrapper = new QueryWrapper<>(); - - //转换并返回 - List list = baseService.list(wrapper); - - //转换数据 - List dtoList = BeanMapper.mapList(list, SysRoleDTO.class); - - return super.success(dtoList); - } -} diff --git a/src/main/java/com/guwan/backend/model/sys/user/controller/SysUserController.java b/src/main/java/com/guwan/backend/model/sys/user/controller/SysUserController.java deleted file mode 100644 index c84df4c..0000000 --- a/src/main/java/com/guwan/backend/model/sys/user/controller/SysUserController.java +++ /dev/null @@ -1,177 +0,0 @@ -package com.guwan.backend.model.sys.user.controller; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.yf.exam.core.api.ApiRest; -import com.yf.exam.core.api.controller.BaseController; -import com.yf.exam.core.api.dto.BaseIdsReqDTO; -import com.yf.exam.core.api.dto.BaseStateReqDTO; -import com.yf.exam.core.api.dto.PagingReqDTO; -import com.yf.exam.modules.sys.user.dto.SysUserDTO; -import com.yf.exam.modules.sys.user.dto.request.SysUserLoginReqDTO; -import com.yf.exam.modules.sys.user.dto.request.SysUserSaveReqDTO; -import com.yf.exam.modules.sys.user.dto.response.SysUserLoginDTO; -import com.yf.exam.modules.sys.user.entity.SysUser; -import com.yf.exam.modules.sys.user.service.SysUserService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.apache.shiro.authz.annotation.RequiresRoles; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import javax.servlet.http.HttpServletRequest; - -/** - *

- * 管理用户控制器 - *

- * - * @author 聪明笨狗 - * @since 2020-04-13 16:57 - */ -@Api(tags = {"管理用户"}) -@RestController -@RequestMapping("/exam/api/sys/user") -public class SysUserController extends BaseController { - - @Autowired - private SysUserService baseService; - - /** - * 用户登录 - * @return - */ - @CrossOrigin - @ApiOperation(value = "用户登录") - @RequestMapping(value = "/login", method = {RequestMethod.POST}) - public ApiRest login(@RequestBody SysUserLoginReqDTO reqDTO) { - SysUserLoginDTO respDTO = baseService.login(reqDTO.getUsername(), reqDTO.getPassword()); - return super.success(respDTO); - } - - /** - * 用户登录 - * @return - */ - @CrossOrigin - @ApiOperation(value = "用户登录") - @RequestMapping(value = "/logout", method = {RequestMethod.POST}) - public ApiRest logout(HttpServletRequest request) { - String token = request.getHeader("token"); - System.out.println("+++++当前会话为:"+token); - baseService.logout(token); - return super.success(); - } - - /** - * 获取会话 - * @return - */ - @ApiOperation(value = "获取会话") - @RequestMapping(value = "/info", method = {RequestMethod.POST}) - public ApiRest info(@RequestParam("token") String token) { - SysUserLoginDTO respDTO = baseService.token(token); - return success(respDTO); - } - - /** - * 修改用户资料 - * @return - */ - @ApiOperation(value = "修改用户资料") - @RequestMapping(value = "/update", method = {RequestMethod.POST}) - public ApiRest update(@RequestBody SysUserDTO reqDTO) { - baseService.update(reqDTO); - return success(); - } - - - /** - * 保存或修改系统用户 - * @return - */ - @RequiresRoles("sa") - @ApiOperation(value = "保存或修改") - @RequestMapping(value = "/save", method = {RequestMethod.POST}) - public ApiRest save(@RequestBody SysUserSaveReqDTO reqDTO) { - baseService.save(reqDTO); - return success(); - } - - - /** - * 批量删除 - * @param reqDTO - * @return - */ - @RequiresRoles("sa") - @ApiOperation(value = "批量删除") - @RequestMapping(value = "/delete", method = { RequestMethod.POST}) - public ApiRest edit(@RequestBody BaseIdsReqDTO reqDTO) { - //根据ID删除 - baseService.removeByIds(reqDTO.getIds()); - return super.success(); - } - - /** - * 分页查找 - * @param reqDTO - * @return - */ - @RequiresRoles("sa") - @ApiOperation(value = "分页查找") - @RequestMapping(value = "/paging", method = { RequestMethod.POST}) - public ApiRest> paging(@RequestBody PagingReqDTO reqDTO) { - - //分页查询并转换 - IPage page = baseService.paging(reqDTO); - return super.success(page); - } - - /** - * 修改状态 - * @param reqDTO - * @return - */ - @RequiresRoles("sa") - @ApiOperation(value = "修改状态") - @RequestMapping(value = "/state", method = { RequestMethod.POST}) - public ApiRest state(@RequestBody BaseStateReqDTO reqDTO) { - - // 条件 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda() - .in(SysUser::getId, reqDTO.getIds()) - .ne(SysUser::getUserName, "admin"); - - - SysUser record = new SysUser(); - record.setState(reqDTO.getState()); - baseService.update(record, wrapper); - - return super.success(); - } - - - /** - * 保存或修改系统用户 - * @return - */ - @ApiOperation(value = "学员注册") - @RequestMapping(value = "/reg", method = {RequestMethod.POST}) - public ApiRest reg(@RequestBody SysUserDTO reqDTO) { - SysUserLoginDTO respDTO = baseService.reg(reqDTO); - return success(respDTO); - } - - /** - * 快速注册,如果手机号存在则登录,不存在就注册 - * @return - */ - @ApiOperation(value = "快速注册") - @RequestMapping(value = "/quick-reg", method = {RequestMethod.POST}) - public ApiRest quick(@RequestBody SysUserDTO reqDTO) { - SysUserLoginDTO respDTO = baseService.quickReg(reqDTO); - return success(respDTO); - } -} diff --git a/src/main/java/com/guwan/backend/model/sys/user/dto/SysRoleDTO.java b/src/main/java/com/guwan/backend/model/sys/user/dto/SysRoleDTO.java deleted file mode 100644 index c9cd869..0000000 --- a/src/main/java/com/guwan/backend/model/sys/user/dto/SysRoleDTO.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.guwan.backend.model.sys.user.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; - -/** -*

-* 角色请求类 -*

-* -* @author 聪明笨狗 -* @since 2020-04-13 16:57 -*/ -@Data -@ApiModel(value="角色", description="角色") -public class SysRoleDTO implements Serializable { - - private static final long serialVersionUID = 1L; - - - @ApiModelProperty(value = "角色ID", required=true) - private String id; - - @ApiModelProperty(value = "角色名称", required=true) - private String roleName; - -} diff --git a/src/main/java/com/guwan/backend/model/sys/user/dto/SysUserDTO.java b/src/main/java/com/guwan/backend/model/sys/user/dto/SysUserDTO.java deleted file mode 100644 index 30a2d7b..0000000 --- a/src/main/java/com/guwan/backend/model/sys/user/dto/SysUserDTO.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.guwan.backend.model.sys.user.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; -import java.util.Date; - -/** -*

-* 管理用户请求类 -*

-* -* @author 聪明笨狗 -* @since 2020-04-13 16:57 -*/ -@Data -@ApiModel(value="管理用户", description="管理用户") -public class SysUserDTO implements Serializable { - - private static final long serialVersionUID = 1L; - - - @ApiModelProperty(value = "ID", required=true) - private String id; - - @ApiModelProperty(value = "用户名", required=true) - private String userName; - - @ApiModelProperty(value = "真实姓名", required=true) - private String realName; - - @ApiModelProperty(value = "密码", required=true) - private String password; - - @ApiModelProperty(value = "密码盐", required=true) - private String salt; - - @ApiModelProperty(value = "角色列表", required=true) - private String roleIds; - - @ApiModelProperty(value = "部门ID", required=true) - private String departId; - - @ApiModelProperty(value = "创建时间", required=true) - private Date createTime; - - @ApiModelProperty(value = "更新时间", required=true) - private Date updateTime; - - @ApiModelProperty(value = "状态", required=true) - private Integer state; - -} diff --git a/src/main/java/com/guwan/backend/model/sys/user/dto/SysUserRoleDTO.java b/src/main/java/com/guwan/backend/model/sys/user/dto/SysUserRoleDTO.java deleted file mode 100644 index 7783142..0000000 --- a/src/main/java/com/guwan/backend/model/sys/user/dto/SysUserRoleDTO.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.guwan.backend.model.sys.user.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; - -/** -*

-* 用户角色请求类 -*

-* -* @author 聪明笨狗 -* @since 2020-04-13 16:57 -*/ -@Data -@ApiModel(value="用户角色", description="用户角色") -public class SysUserRoleDTO implements Serializable { - - private static final long serialVersionUID = 1L; - - - @ApiModelProperty(value = "ID", required=true) - private String id; - - @ApiModelProperty(value = "用户ID", required=true) - private String userId; - - @ApiModelProperty(value = "角色ID", required=true) - private String roleId; - -} diff --git a/src/main/java/com/guwan/backend/model/sys/user/dto/request/SysUserLoginReqDTO.java b/src/main/java/com/guwan/backend/model/sys/user/dto/request/SysUserLoginReqDTO.java deleted file mode 100644 index 3b7611c..0000000 --- a/src/main/java/com/guwan/backend/model/sys/user/dto/request/SysUserLoginReqDTO.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.guwan.backend.model.sys.user.dto.request; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; - -/** -*

-* 管理员登录请求类 -*

-* -* @author 聪明笨狗 -* @since 2020-04-13 16:57 -*/ -@Data -@ApiModel(value="管理员登录请求类", description="管理员登录请求类") -public class SysUserLoginReqDTO implements Serializable { - - private static final long serialVersionUID = 1L; - - @ApiModelProperty(value = "用户名", required=true) - private String username; - - @ApiModelProperty(value = "密码", required=true) - private String password; - -} diff --git a/src/main/java/com/guwan/backend/model/sys/user/dto/request/SysUserSaveReqDTO.java b/src/main/java/com/guwan/backend/model/sys/user/dto/request/SysUserSaveReqDTO.java deleted file mode 100644 index 14acf71..0000000 --- a/src/main/java/com/guwan/backend/model/sys/user/dto/request/SysUserSaveReqDTO.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.guwan.backend.model.sys.user.dto.request; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; -import java.util.List; - -/** -*

-* 管理员登录请求类 -*

-* -* @author 聪明笨狗 -* @since 2020-04-13 16:57 -*/ -@Data -@ApiModel(value="管理员保存请求类", description="管理员保存请求类") -public class SysUserSaveReqDTO implements Serializable { - - @ApiModelProperty(value = "ID", required=true) - private String id; - - @ApiModelProperty(value = "用户名", required=true) - private String userName; - - @ApiModelProperty(value = "头像", required=true) - private String avatar; - - @ApiModelProperty(value = "真实姓名", required=true) - private String realName; - - @ApiModelProperty(value = "密码", required=true) - private String password; - - @ApiModelProperty(value = "部门", required=true) - private String departId; - - @ApiModelProperty(value = "角色列表", required=true) - private List roles; - -} diff --git a/src/main/java/com/guwan/backend/model/sys/user/dto/request/SysUserTokenReqDTO.java b/src/main/java/com/guwan/backend/model/sys/user/dto/request/SysUserTokenReqDTO.java deleted file mode 100644 index 6673b15..0000000 --- a/src/main/java/com/guwan/backend/model/sys/user/dto/request/SysUserTokenReqDTO.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.guwan.backend.model.sys.user.dto.request; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; - -/** -*

-* 会话检查请求类 -*

-* -* @author 聪明笨狗 -* @since 2020-04-13 16:57 -*/ -@Data -@ApiModel(value="会话检查请求类", description="会话检查请求类") -public class SysUserTokenReqDTO implements Serializable { - - private static final long serialVersionUID = 1L; - - @ApiModelProperty(value = "用户名", required=true) - private String token; - -} diff --git a/src/main/java/com/guwan/backend/model/sys/user/dto/response/SysUserLoginDTO.java b/src/main/java/com/guwan/backend/model/sys/user/dto/response/SysUserLoginDTO.java deleted file mode 100644 index 1e4e0d4..0000000 --- a/src/main/java/com/guwan/backend/model/sys/user/dto/response/SysUserLoginDTO.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.guwan.backend.model.sys.user.dto.response; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; -import java.util.Date; -import java.util.List; - -/** -*

-* 管理用户请求类 -*

-* -* @author 聪明笨狗 -* @since 2020-04-13 16:57 -*/ -@Data -@ApiModel(value="管理用户登录响应类", description="管理用户登录响应类") -public class SysUserLoginDTO implements Serializable { - - private static final long serialVersionUID = 1L; - - @ApiModelProperty(value = "ID", required=true) - private String id; - - @ApiModelProperty(value = "用户名", required=true) - private String userName; - - @ApiModelProperty(value = "真实姓名", required=true) - private String realName; - - @ApiModelProperty(value = "角色列表", required=true) - private String roleIds; - - @ApiModelProperty(value = "部门ID", required=true) - private String departId; - - @ApiModelProperty(value = "创建时间", required=true) - private Date createTime; - - @ApiModelProperty(value = "更新时间", required=true) - private Date updateTime; - - @ApiModelProperty(value = "状态", required=true) - private Integer state; - - @ApiModelProperty(value = "角色列表", required=true) - private List roles; - - @ApiModelProperty(value = "登录令牌", required=true) - private String token; - -} diff --git a/src/main/java/com/guwan/backend/model/sys/user/entity/SysRole.java b/src/main/java/com/guwan/backend/model/sys/user/entity/SysRole.java deleted file mode 100644 index 7290769..0000000 --- a/src/main/java/com/guwan/backend/model/sys/user/entity/SysRole.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.guwan.backend.model.sys.user.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.extension.activerecord.Model; -import lombok.Data; - -/** -*

-* 角色实体类 -*

-* -* @author 聪明笨狗 -* @since 2020-04-13 16:57 -*/ -@Data -@TableName("sys_role") -public class SysRole extends Model { - - private static final long serialVersionUID = 1L; - - /** - * 角色ID - */ - @TableId(value = "id", type = IdType.ASSIGN_ID) - private String id; - - /** - * 角色名称 - */ - @TableField("role_name") - private String roleName; - -} diff --git a/src/main/java/com/guwan/backend/model/sys/user/entity/SysUser.java b/src/main/java/com/guwan/backend/model/sys/user/entity/SysUser.java deleted file mode 100644 index 67f24d6..0000000 --- a/src/main/java/com/guwan/backend/model/sys/user/entity/SysUser.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.guwan.backend.model.sys.user.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.extension.activerecord.Model; -import lombok.Data; - -import java.util.Date; - -/** -*

-* 管理用户实体类 -*

-* -* @author 聪明笨狗 -* @since 2020-04-13 16:57 -*/ -@Data -@TableName("sys_user") -public class SysUser extends Model { - - private static final long serialVersionUID = 1L; - - /** - * ID - */ - @TableId(value = "id", type = IdType.ASSIGN_ID) - private String id; - - /** - * 用户名 - */ - @TableField("user_name") - private String userName; - - /** - * 真实姓名 - */ - @TableField("real_name") - private String realName; - - /** - * 密码 - */ - private String password; - - /** - * 密码盐 - */ - private String salt; - - /** - * 角色列表 - */ - @TableField("role_ids") - private String roleIds; - - /** - * 部门ID - */ - @TableField("depart_id") - private String departId; - - /** - * 创建时间 - */ - @TableField("create_time") - private Date createTime; - - /** - * 更新时间 - */ - @TableField("update_time") - private Date updateTime; - - /** - * 状态 - */ - private Integer state; - -} diff --git a/src/main/java/com/guwan/backend/model/sys/user/entity/SysUserRole.java b/src/main/java/com/guwan/backend/model/sys/user/entity/SysUserRole.java deleted file mode 100644 index 1621426..0000000 --- a/src/main/java/com/guwan/backend/model/sys/user/entity/SysUserRole.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.guwan.backend.model.sys.user.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.extension.activerecord.Model; -import lombok.Data; - -/** -*

-* 用户角色实体类 -*

-* -* @author 聪明笨狗 -* @since 2020-04-13 16:57 -*/ -@Data -@TableName("sys_user_role") -public class SysUserRole extends Model { - - private static final long serialVersionUID = 1L; - - /** - * ID - */ - @TableId(value = "id", type = IdType.ASSIGN_ID) - private String id; - - /** - * 用户ID - */ - @TableField("user_id") - private String userId; - - /** - * 角色ID - */ - @TableField("role_id") - private String roleId; - -} diff --git a/src/main/java/com/guwan/backend/model/sys/user/mapper/SysRoleMapper.java b/src/main/java/com/guwan/backend/model/sys/user/mapper/SysRoleMapper.java deleted file mode 100644 index cce0666..0000000 --- a/src/main/java/com/guwan/backend/model/sys/user/mapper/SysRoleMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.guwan.backend.model.sys.user.mapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yf.exam.modules.sys.user.entity.SysRole; - -/** -*

-* 角色Mapper -*

-* -* @author 聪明笨狗 -* @since 2020-04-13 16:57 -*/ -public interface SysRoleMapper extends BaseMapper { - -} diff --git a/src/main/java/com/guwan/backend/model/sys/user/mapper/SysUserMapper.java b/src/main/java/com/guwan/backend/model/sys/user/mapper/SysUserMapper.java deleted file mode 100644 index 0d176f8..0000000 --- a/src/main/java/com/guwan/backend/model/sys/user/mapper/SysUserMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.guwan.backend.model.sys.user.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yf.exam.modules.sys.user.entity.SysUser; - -/** -*

-* 管理用户Mapper -*

-* -* @author 聪明笨狗 -* @since 2020-04-13 16:57 -*/ -public interface SysUserMapper extends BaseMapper { - -} diff --git a/src/main/java/com/guwan/backend/model/sys/user/mapper/SysUserRoleMapper.java b/src/main/java/com/guwan/backend/model/sys/user/mapper/SysUserRoleMapper.java deleted file mode 100644 index a438daa..0000000 --- a/src/main/java/com/guwan/backend/model/sys/user/mapper/SysUserRoleMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.guwan.backend.model.sys.user.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yf.exam.modules.sys.user.entity.SysUserRole; - -/** -*

-* 用户角色Mapper -*

-* -* @author 聪明笨狗 -* @since 2020-04-13 16:57 -*/ -public interface SysUserRoleMapper extends BaseMapper { - -} diff --git a/src/main/java/com/guwan/backend/model/sys/user/service/SysRoleService.java b/src/main/java/com/guwan/backend/model/sys/user/service/SysRoleService.java deleted file mode 100644 index 3f0d8b5..0000000 --- a/src/main/java/com/guwan/backend/model/sys/user/service/SysRoleService.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.guwan.backend.model.sys.user.service; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.service.IService; -import com.yf.exam.core.api.dto.PagingReqDTO; -import com.yf.exam.modules.sys.user.dto.SysRoleDTO; -import com.yf.exam.modules.sys.user.entity.SysRole; - -/** -*

-* 角色业务类 -*

-* -* @author 聪明笨狗 -* @since 2020-04-13 16:57 -*/ -public interface SysRoleService extends IService { - - /** - * 分页查询数据 - * @param reqDTO - * @return - */ - IPage paging(PagingReqDTO reqDTO); -} diff --git a/src/main/java/com/guwan/backend/model/sys/user/service/SysUserRoleService.java b/src/main/java/com/guwan/backend/model/sys/user/service/SysUserRoleService.java deleted file mode 100644 index 3bc4c97..0000000 --- a/src/main/java/com/guwan/backend/model/sys/user/service/SysUserRoleService.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.guwan.backend.model.sys.user.service; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.service.IService; -import com.yf.exam.core.api.dto.PagingReqDTO; -import com.yf.exam.modules.sys.user.dto.SysUserRoleDTO; -import com.yf.exam.modules.sys.user.entity.SysUserRole; - -import java.util.List; - -/** -*

-* 用户角色业务类 -*

-* -* @author 聪明笨狗 -* @since 2020-04-13 16:57 -*/ -public interface SysUserRoleService extends IService { - - /** - * 分页查询数据 - * @param reqDTO - * @return - */ - IPage paging(PagingReqDTO reqDTO); - - /** - * 查找用户角色列表 - * @param userId - * @return - */ - List listRoles(String userId); - - /** - * 保存全部角色 - * @param userId - * @param ids - * @return - */ - String saveRoles(String userId, List ids); - - /** - * 是否学生 - * @param userId - * @return - */ - boolean isStudent(String userId); - - /** - * 是否老师 - */ - boolean isTeacher(String userId); - - /** - * 是否管理 - * @param userId - * @return - */ - boolean isAdmin(String userId); -} diff --git a/src/main/java/com/guwan/backend/model/sys/user/service/SysUserService.java b/src/main/java/com/guwan/backend/model/sys/user/service/SysUserService.java deleted file mode 100644 index f1a5f73..0000000 --- a/src/main/java/com/guwan/backend/model/sys/user/service/SysUserService.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.guwan.backend.model.sys.user.service; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.service.IService; -import com.yf.exam.core.api.dto.PagingReqDTO; -import com.yf.exam.modules.sys.user.dto.SysUserDTO; -import com.yf.exam.modules.sys.user.dto.request.SysUserSaveReqDTO; -import com.yf.exam.modules.sys.user.dto.response.SysUserLoginDTO; -import com.yf.exam.modules.sys.user.entity.SysUser; - -/** -*

-* 管理用户业务类 -*

-* -* @author 聪明笨狗 -* @since 2020-04-13 16:57 -*/ -public interface SysUserService extends IService { - - /** - * 分页查询数据 - * @param reqDTO - * @return - */ - IPage paging(PagingReqDTO reqDTO); - - /** - * 登录 - * @param userName - * @param password - * @return - */ - SysUserLoginDTO login(String userName, String password); - - /** - * 获取管理会话 - * @param token - * @return - */ - SysUserLoginDTO token(String token); - - /** - * 退出登录 - * @param token - */ - void logout(String token); - - /** - * 修改用户资料 - * @param reqDTO - */ - void update(SysUserDTO reqDTO); - - /** - * 保存添加系统用户 - * @param reqDTO - */ - void save(SysUserSaveReqDTO reqDTO); - - /** - * 用户注册 - * @param reqDTO - */ - SysUserLoginDTO reg(SysUserDTO reqDTO); - - /** - * 快速注册 - * @param reqDTO - */ - SysUserLoginDTO quickReg(SysUserDTO reqDTO); -} diff --git a/src/main/java/com/guwan/backend/model/sys/user/service/impl/SysRoleServiceImpl.java b/src/main/java/com/guwan/backend/model/sys/user/service/impl/SysRoleServiceImpl.java deleted file mode 100644 index 1263789..0000000 --- a/src/main/java/com/guwan/backend/model/sys/user/service/impl/SysRoleServiceImpl.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.guwan.backend.model.sys.user.service.impl; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.TypeReference; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.yf.exam.core.api.dto.PagingReqDTO; -import com.yf.exam.modules.sys.user.dto.SysRoleDTO; -import com.yf.exam.modules.sys.user.entity.SysRole; -import com.yf.exam.modules.sys.user.mapper.SysRoleMapper; -import com.yf.exam.modules.sys.user.service.SysRoleService; -import org.springframework.stereotype.Service; - -/** -*

-* 语言设置 服务实现类 -*

-* -* @author 聪明笨狗 -* @since 2020-04-13 16:57 -*/ -@Service -public class SysRoleServiceImpl extends ServiceImpl implements SysRoleService { - - @Override - public IPage paging(PagingReqDTO reqDTO) { - - //创建分页对象 - IPage query = new Page<>(reqDTO.getCurrent(), reqDTO.getSize()); - - //查询条件 - QueryWrapper wrapper = new QueryWrapper<>(); - - //获得数据 - IPage page = this.page(query, wrapper); - //转换结果 - IPage pageData = JSON.parseObject(JSON.toJSONString(page), new TypeReference>(){}); - return pageData; - } -} diff --git a/src/main/java/com/guwan/backend/model/sys/user/service/impl/SysUserRoleServiceImpl.java b/src/main/java/com/guwan/backend/model/sys/user/service/impl/SysUserRoleServiceImpl.java deleted file mode 100644 index 40a9507..0000000 --- a/src/main/java/com/guwan/backend/model/sys/user/service/impl/SysUserRoleServiceImpl.java +++ /dev/null @@ -1,128 +0,0 @@ -package com.guwan.backend.model.sys.user.service.impl; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.TypeReference; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.yf.exam.core.api.dto.PagingReqDTO; -import com.yf.exam.modules.sys.user.dto.SysUserRoleDTO; -import com.yf.exam.modules.sys.user.entity.SysUserRole; -import com.yf.exam.modules.sys.user.mapper.SysUserRoleMapper; -import com.yf.exam.modules.sys.user.service.SysUserRoleService; -import org.springframework.stereotype.Service; -import org.springframework.util.CollectionUtils; -import org.springframework.util.StringUtils; - -import java.util.ArrayList; -import java.util.List; - -/** -*

-* 语言设置 服务实现类 -*

-* -* @author 聪明笨狗 -* @since 2020-04-13 16:57 -*/ -@Service -public class SysUserRoleServiceImpl extends ServiceImpl implements SysUserRoleService { - - @Override - public IPage paging(PagingReqDTO reqDTO) { - - //创建分页对象 - IPage query = new Page<>(reqDTO.getCurrent(), reqDTO.getSize()); - - //查询条件 - QueryWrapper wrapper = new QueryWrapper<>(); - - //获得数据 - IPage page = this.page(query, wrapper); - //转换结果 - IPage pageData = JSON.parseObject(JSON.toJSONString(page), new TypeReference>(){}); - return pageData; - } - - @Override - public List listRoles(String userId) { - - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda().eq(SysUserRole::getUserId, userId); - - List list = this.list(wrapper); - List roles = new ArrayList<>(); - if(!CollectionUtils.isEmpty(list)){ - for(SysUserRole item: list){ - roles.add(item.getRoleId()); - } - } - - return roles; - } - - @Override - public String saveRoles(String userId, List ids) { - - // 删除全部角色 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda().eq(SysUserRole::getUserId, userId); - this.remove(wrapper); - - - if(!CollectionUtils.isEmpty(ids)){ - - List list = new ArrayList<>(); - String roleIds = null; - - for(String item: ids){ - SysUserRole role = new SysUserRole(); - role.setRoleId(item); - role.setUserId(userId); - list.add(role); - if(StringUtils.isEmpty(roleIds)){ - roleIds = item; - }else{ - roleIds+=","+item; - } - } - - this.saveBatch(list); - return roleIds; - } - - return ""; - } - - @Override - public boolean isStudent(String userId) { - - // 学生角色 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda().eq(SysUserRole::getUserId, userId) - .eq(SysUserRole::getRoleId, "student"); - - return this.count(wrapper) > 0; - } - - @Override - public boolean isTeacher(String userId) { - // 学生角色 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda().eq(SysUserRole::getUserId, userId) - .eq(SysUserRole::getRoleId, "teacher"); - - return this.count(wrapper) > 0; - } - - @Override - public boolean isAdmin(String userId) { - // 学生角色 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda().eq(SysUserRole::getUserId, userId) - .eq(SysUserRole::getRoleId, "sa"); - - return this.count(wrapper) > 0; - } -} diff --git a/src/main/java/com/guwan/backend/model/sys/user/service/impl/SysUserServiceImpl.java b/src/main/java/com/guwan/backend/model/sys/user/service/impl/SysUserServiceImpl.java deleted file mode 100644 index e40fed3..0000000 --- a/src/main/java/com/guwan/backend/model/sys/user/service/impl/SysUserServiceImpl.java +++ /dev/null @@ -1,253 +0,0 @@ -package com.guwan.backend.model.sys.user.service.impl; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.TypeReference; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.core.toolkit.IdWorker; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.yf.exam.ability.shiro.jwt.JwtUtils; -import com.yf.exam.core.api.ApiError; -import com.yf.exam.core.api.dto.PagingReqDTO; -import com.yf.exam.core.enums.CommonState; -import com.yf.exam.core.exception.ServiceException; -import com.yf.exam.core.utils.BeanMapper; -import com.yf.exam.core.utils.passwd.PassHandler; -import com.yf.exam.core.utils.passwd.PassInfo; -import com.yf.exam.modules.sys.user.dto.SysUserDTO; -import com.yf.exam.modules.sys.user.dto.request.SysUserSaveReqDTO; -import com.yf.exam.modules.sys.user.dto.response.SysUserLoginDTO; -import com.yf.exam.modules.sys.user.entity.SysUser; -import com.yf.exam.modules.sys.user.mapper.SysUserMapper; -import com.yf.exam.modules.sys.user.service.SysUserRoleService; -import com.yf.exam.modules.sys.user.service.SysUserService; -import com.yf.exam.modules.user.UserUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.shiro.SecurityUtils; -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; - -/** -*

-* 语言设置 服务实现类 -*

-* -* @author 聪明笨狗 -* @since 2020-04-13 16:57 -*/ -@Service -public class SysUserServiceImpl extends ServiceImpl implements SysUserService { - - @Autowired - private SysUserRoleService sysUserRoleService; - - - @Override - public IPage paging(PagingReqDTO reqDTO) { - - //创建分页对象 - IPage query = new Page<>(reqDTO.getCurrent(), reqDTO.getSize()); - - //查询条件 - QueryWrapper wrapper = new QueryWrapper<>(); - - SysUserDTO params = reqDTO.getParams(); - - if(params!=null){ - if(!StringUtils.isBlank(params.getUserName())){ - wrapper.lambda().like(SysUser::getUserName, params.getUserName()); - } - - if(!StringUtils.isBlank(params.getRealName())){ - wrapper.lambda().like(SysUser::getRealName, params.getRealName()); - } - } - - //获得数据 - IPage page = this.page(query, wrapper); - //转换结果 - IPage pageData = JSON.parseObject(JSON.toJSONString(page), new TypeReference>(){}); - return pageData; - } - - @Override - public SysUserLoginDTO login(String userName, String password) { - - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda().eq(SysUser::getUserName, userName); - - SysUser user = this.getOne(wrapper, false); - if(user == null){ - throw new ServiceException(ApiError.ERROR_90010002); - } - - // 被禁用 - if(user.getState().equals(CommonState.ABNORMAL)){ - throw new ServiceException(ApiError.ERROR_90010005); - } - - boolean check = PassHandler.checkPass(password,user.getSalt(), user.getPassword()); - if(!check){ - throw new ServiceException(ApiError.ERROR_90010002); - } - - return this.setToken(user); - } - - @Override - public SysUserLoginDTO token(String token) { - - // 获得会话 - String username = JwtUtils.getUsername(token); - - // 校验结果 - boolean check = JwtUtils.verify(token, username); - - if(!check){ - throw new ServiceException(ApiError.ERROR_90010002); - } - - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda().eq(SysUser::getUserName, username); - - SysUser user = this.getOne(wrapper, false); - if(user == null){ - throw new ServiceException(ApiError.ERROR_10010002); - } - - // 被禁用 - if(user.getState().equals(CommonState.ABNORMAL)){ - throw new ServiceException(ApiError.ERROR_90010005); - } - - return this.setToken(user); - } - - @Override - public void logout(String token) { - - // 仅退出当前会话 - SecurityUtils.getSubject().logout(); - } - - @Override - public void update(SysUserDTO reqDTO) { - - - String pass = reqDTO.getPassword(); - if(!StringUtils.isBlank(pass)){ - PassInfo passInfo = PassHandler.buildPassword(pass); - SysUser user = this.getById(UserUtils.getUserId()); - user.setPassword(passInfo.getPassword()); - user.setSalt(passInfo.getSalt()); - this.updateById(user); - } - } - - @Transactional(rollbackFor = Exception.class) - @Override - public void save(SysUserSaveReqDTO reqDTO) { - - List roles = reqDTO.getRoles(); - - if(CollectionUtils.isEmpty(roles)){ - throw new ServiceException(ApiError.ERROR_90010003); - } - - // 保存基本信息 - SysUser user = new SysUser(); - BeanMapper.copy(reqDTO, user); - - // 添加模式 - if(StringUtils.isBlank(user.getId())){ - user.setId(IdWorker.getIdStr()); - } - - // 修改密码 - if(!StringUtils.isBlank(reqDTO.getPassword())){ - PassInfo pass = PassHandler.buildPassword(reqDTO.getPassword()); - user.setPassword(pass.getPassword()); - user.setSalt(pass.getSalt()); - } - - // 保存角色信息 - String roleIds = sysUserRoleService.saveRoles(user.getId(), roles); - user.setRoleIds(roleIds); - this.saveOrUpdate(user); - } - - @Transactional(rollbackFor = Exception.class) - @Override - public SysUserLoginDTO reg(SysUserDTO reqDTO) { - - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda().eq(SysUser::getUserName, reqDTO.getUserName()); - - int count = this.count(wrapper); - - if(count > 0){ - throw new ServiceException(1, "用户名已存在,换一个吧!"); - } - - - // 保存用户 - SysUser user = new SysUser(); - user.setId(IdWorker.getIdStr()); - user.setUserName(reqDTO.getUserName()); - user.setRealName(reqDTO.getRealName()); - PassInfo passInfo = PassHandler.buildPassword(reqDTO.getPassword()); - user.setPassword(passInfo.getPassword()); - user.setSalt(passInfo.getSalt()); - - // 保存角色 - List roles = new ArrayList<>(); - roles.add("student"); - String roleIds = sysUserRoleService.saveRoles(user.getId(), roles); - user.setRoleIds(roleIds); - this.save(user); - - return this.setToken(user); - } - - @Override - public SysUserLoginDTO quickReg(SysUserDTO reqDTO) { - - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda().eq(SysUser::getUserName, reqDTO.getUserName()); - wrapper.last(" LIMIT 1 "); - SysUser user = this.getOne(wrapper); - if(user!=null){ - return this.setToken(user); - } - - return this.reg(reqDTO); - } - - - /** - * 保存会话信息 - * @param user - * @return - */ - private SysUserLoginDTO setToken(SysUser user){ - - SysUserLoginDTO respDTO = new SysUserLoginDTO(); - BeanMapper.copy(user, respDTO); - - // 生成Token - String token = JwtUtils.sign(user.getUserName()); - respDTO.setToken(token); - - // 填充角色 - List roles = sysUserRoleService.listRoles(user.getId()); - respDTO.setRoles(roles); - - return respDTO; - } -} diff --git a/src/main/java/com/guwan/backend/model/user/UserUtils.java b/src/main/java/com/guwan/backend/model/user/UserUtils.java deleted file mode 100644 index 13a5340..0000000 --- a/src/main/java/com/guwan/backend/model/user/UserUtils.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.guwan.backend.model.user; - -import com.yf.exam.core.api.ApiError; -import com.yf.exam.core.exception.ServiceException; -import com.yf.exam.modules.sys.user.dto.response.SysUserLoginDTO; -import org.apache.shiro.SecurityUtils; - -/** - * 用户静态工具类 - * @author bool - */ -public class UserUtils { - - - /** - * 获取当前登录用户的ID - * @param throwable - * @return - */ - public static String getUserId(boolean throwable){ - try { - return ((SysUserLoginDTO) SecurityUtils.getSubject().getPrincipal()).getId(); - }catch (Exception e){ - if(throwable){ - throw new ServiceException(ApiError.ERROR_10010002); - } - return null; - } - } - - /** - * 获取当前登录用户的ID - * @param throwable - * @return - */ - public static boolean isAdmin(boolean throwable){ - try { - SysUserLoginDTO dto = ((SysUserLoginDTO) SecurityUtils.getSubject().getPrincipal()); - return dto.getRoles().contains("sa"); - }catch (Exception e){ - if(throwable){ - throw new ServiceException(ApiError.ERROR_10010002); - } - } - - return false; - } - - /** - * 获取当前登录用户的ID,默认是会抛异常的 - * @return - */ - public static String getUserId(){ - return getUserId(true); - } -} diff --git a/src/main/java/com/guwan/backend/model/user/book/controller/UserBookController.java b/src/main/java/com/guwan/backend/model/user/book/controller/UserBookController.java deleted file mode 100644 index 6639709..0000000 --- a/src/main/java/com/guwan/backend/model/user/book/controller/UserBookController.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.guwan.backend.model.user.book.controller; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.yf.exam.core.api.ApiRest; -import com.yf.exam.core.api.controller.BaseController; -import com.yf.exam.core.api.dto.BaseIdRespDTO; -import com.yf.exam.core.api.dto.BaseIdsReqDTO; -import com.yf.exam.core.api.dto.PagingReqDTO; -import com.yf.exam.modules.user.book.dto.UserBookDTO; -import com.yf.exam.modules.user.book.service.UserBookService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -/** -*

-* 错题本控制器 -*

-* -* @author 聪明笨狗 -* @since 2020-05-27 17:56 -*/ -@Api(tags={"错题本"}) -@RestController -@RequestMapping("/exam/api/user/wrong-book") -public class UserBookController extends BaseController { - - @Autowired - private UserBookService baseService; - - - /** - * 批量删除 - * @param reqDTO - * @return - */ - @ApiOperation(value = "批量删除") - @RequestMapping(value = "/delete", method = { RequestMethod.POST}) - public ApiRest delete(@RequestBody BaseIdsReqDTO reqDTO) { - //根据ID删除 - baseService.removeByIds(reqDTO.getIds()); - return super.success(); - } - - /** - * 分页查找 - * @param reqDTO - * @return - */ - @ApiOperation(value = "分页查找") - @RequestMapping(value = "/paging", method = { RequestMethod.POST}) - public ApiRest> paging(@RequestBody PagingReqDTO reqDTO) { - - //分页查询并转换 - IPage page = baseService.paging(reqDTO); - - return super.success(page); - } - - /** - * 查找列表,每次最多返回200条数据 - * @param reqDTO - * @return - */ - @ApiOperation(value = "查找列表") - @RequestMapping(value = "/next", method = { RequestMethod.POST}) - public ApiRest nextQu(@RequestBody UserBookDTO reqDTO) { - //转换并返回 - String quId = baseService.findNext(reqDTO.getExamId(), reqDTO.getQuId()); - return super.success(new BaseIdRespDTO(quId)); - } -} diff --git a/src/main/java/com/guwan/backend/model/user/book/dto/UserBookDTO.java b/src/main/java/com/guwan/backend/model/user/book/dto/UserBookDTO.java deleted file mode 100644 index 3c75462..0000000 --- a/src/main/java/com/guwan/backend/model/user/book/dto/UserBookDTO.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.guwan.backend.model.user.book.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; -import java.util.Date; - -/** -*

-* 错题本请求类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-27 17:56 -*/ -@Data -@ApiModel(value="错题本", description="错题本") -public class UserBookDTO implements Serializable { - - private static final long serialVersionUID = 1L; - - - @ApiModelProperty(value = "ID", required=true) - private String id; - - @ApiModelProperty(value = "考试ID", required=true) - private String examId; - - @ApiModelProperty(value = "用户ID", required=true) - private String userId; - - @ApiModelProperty(value = "题目ID", required=true) - private String quId; - - @ApiModelProperty(value = "加入时间", required=true) - private Date createTime; - - @ApiModelProperty(value = "最近错误时间", required=true) - private Date updateTime; - - @ApiModelProperty(value = "错误时间", required=true) - private Integer wrongCount; - - @ApiModelProperty(value = "题目标题", required=true) - private String title; - - @ApiModelProperty(value = "错题序号", required=true) - private Integer sort; - -} \ No newline at end of file diff --git a/src/main/java/com/guwan/backend/model/user/book/entity/UserBook.java b/src/main/java/com/guwan/backend/model/user/book/entity/UserBook.java deleted file mode 100644 index 52ec856..0000000 --- a/src/main/java/com/guwan/backend/model/user/book/entity/UserBook.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.guwan.backend.model.user.book.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.extension.activerecord.Model; -import lombok.Data; - -import java.util.Date; - -/** -*

-* 错题本实体类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-27 17:56 -*/ -@Data -@TableName("el_user_book") -public class UserBook extends Model { - - private static final long serialVersionUID = 1L; - - /** - * ID - */ - @TableId(value = "id", type = IdType.ASSIGN_ID) - private String id; - - /** - * 考试ID - */ - @TableField("exam_id") - private String examId; - - /** - * 用户ID - */ - @TableField("user_id") - private String userId; - - /** - * 题目ID - */ - @TableField("qu_id") - private String quId; - - /** - * 加入时间 - */ - @TableField("create_time") - private Date createTime; - - /** - * 最近错误时间 - */ - @TableField("update_time") - private Date updateTime; - - /** - * 错误时间 - */ - @TableField("wrong_count") - private Integer wrongCount; - - /** - * 题目标题 - */ - private String title; - - /** - * 错题序号 - */ - private Integer sort; - -} diff --git a/src/main/java/com/guwan/backend/model/user/book/mapper/UserBookMapper.java b/src/main/java/com/guwan/backend/model/user/book/mapper/UserBookMapper.java deleted file mode 100644 index 06e3105..0000000 --- a/src/main/java/com/guwan/backend/model/user/book/mapper/UserBookMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.guwan.backend.model.user.book.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yf.exam.modules.user.book.entity.UserBook; - -/** -*

-* 错题本Mapper -*

-* -* @author 聪明笨狗 -* @since 2020-05-27 17:56 -*/ -public interface UserBookMapper extends BaseMapper { - -} diff --git a/src/main/java/com/guwan/backend/model/user/book/service/UserBookService.java b/src/main/java/com/guwan/backend/model/user/book/service/UserBookService.java deleted file mode 100644 index 8556aab..0000000 --- a/src/main/java/com/guwan/backend/model/user/book/service/UserBookService.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.guwan.backend.model.user.book.service; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.service.IService; -import com.yf.exam.core.api.dto.PagingReqDTO; -import com.yf.exam.modules.user.book.dto.UserBookDTO; -import com.yf.exam.modules.user.book.entity.UserBook; - -/** -*

-* 错题本业务类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-27 17:56 -*/ -public interface UserBookService extends IService { - - /** - * 分页查询数据 - * @param reqDTO - * @return - */ - IPage paging(PagingReqDTO reqDTO); - - /** - * 加入错题本 - * @param quId - * @param examId - */ - void addBook(String examId, String quId); - - /** - * 查找第一个错题 - * @param quId - * @param examId - * @return - */ - String findNext(String examId, String quId); -} diff --git a/src/main/java/com/guwan/backend/model/user/book/service/impl/UserBookServiceImpl.java b/src/main/java/com/guwan/backend/model/user/book/service/impl/UserBookServiceImpl.java deleted file mode 100644 index 1d2073d..0000000 --- a/src/main/java/com/guwan/backend/model/user/book/service/impl/UserBookServiceImpl.java +++ /dev/null @@ -1,155 +0,0 @@ -package com.guwan.backend.model.user.book.service.impl; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.TypeReference; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.yf.exam.core.api.dto.PagingReqDTO; -import com.yf.exam.modules.qu.entity.Qu; -import com.yf.exam.modules.qu.service.QuService; -import com.yf.exam.modules.user.UserUtils; -import com.yf.exam.modules.user.book.dto.UserBookDTO; -import com.yf.exam.modules.user.book.entity.UserBook; -import com.yf.exam.modules.user.book.mapper.UserBookMapper; -import com.yf.exam.modules.user.book.service.UserBookService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - -/** -*

-* 语言设置 服务实现类 -*

-* -* @author 聪明笨狗 -* @since 2020-05-27 17:56 -*/ -@Service -public class UserBookServiceImpl extends ServiceImpl implements UserBookService { - - @Autowired - private QuService quService; - - @Override - public IPage paging(PagingReqDTO reqDTO) { - - //创建分页对象 - Page query = new Page<>(reqDTO.getCurrent(), reqDTO.getSize()); - - //查询条件 - QueryWrapper wrapper = new QueryWrapper<>(); - // 查找用户的错题 - wrapper.lambda().eq(UserBook::getUserId, UserUtils.getUserId(true)); - - UserBookDTO params = reqDTO.getParams(); - if(params!=null){ - if(!StringUtils.isEmpty(params.getTitle())){ - wrapper.lambda().like(UserBook::getTitle, params.getTitle()); - } - - if(!StringUtils.isEmpty(params.getExamId())){ - wrapper.lambda().eq(UserBook::getExamId, params.getExamId()); - } - } - - //获得数据 - IPage page = this.page(query, wrapper); - //转换结果 - IPage pageData = JSON.parseObject(JSON.toJSONString(page), new TypeReference>(){}); - return pageData; - } - - - - @Override - public void addBook(String examId, String quId) { - - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda() - .eq(UserBook::getUserId, UserUtils.getUserId()) - .eq(UserBook::getExamId, examId) - .eq(UserBook::getQuId, quId); - - //查找已有的错题信息 - UserBook book = this.getOne(wrapper, false); - - - // 问题 - Qu qu = quService.getById(quId); - - if (book == null) { - book = new UserBook(); - book.setExamId(examId); - book.setUserId(UserUtils.getUserId()); - book.setTitle(qu.getContent()); - book.setQuId(quId); - book.setWrongCount(1); - Integer maxSort = this.findMaxSort(examId, UserUtils.getUserId()); - book.setSort(maxSort+1); - - this.save(book); - } else { - book.setWrongCount(book.getWrongCount()+1); - this.updateById(book); - } - } - - @Override - public String findNext(String examId, String quId) { - - - Integer sort = 999999; - - if(!StringUtils.isEmpty(quId)){ - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda() - .eq(UserBook::getUserId, UserUtils.getUserId()) - .eq(UserBook::getExamId, examId) - .eq(UserBook::getQuId, quId); - wrapper.last(" ORDER BY `sort` DESC"); - - UserBook last = this.getOne(wrapper, false); - if(last!=null){ - sort = last.getSort(); - } - } - - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda() - .eq(UserBook::getUserId, UserUtils.getUserId()) - .eq(UserBook::getExamId, examId) - .lt(UserBook::getSort, sort); - wrapper.last(" ORDER BY `sort` DESC"); - - UserBook next = this.getOne(wrapper, false); - if(next != null){ - return next.getQuId(); - } - - return null; - } - - /** - * 查找最大的排序 - * @param userId - * @return - */ - private Integer findMaxSort(String examId, String userId){ - - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda() - .eq(UserBook::getExamId, examId) - .eq(UserBook::getUserId, userId); - wrapper.last(" ORDER BY `sort` DESC"); - - UserBook book = this.getOne(wrapper, false); - if(book == null){ - return 0; - } - return book.getSort(); - } - - -} diff --git a/src/main/java/com/guwan/backend/model/user/exam/controller/UserExamController.java b/src/main/java/com/guwan/backend/model/user/exam/controller/UserExamController.java deleted file mode 100644 index 6636440..0000000 --- a/src/main/java/com/guwan/backend/model/user/exam/controller/UserExamController.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.guwan.backend.model.user.exam.controller; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.yf.exam.core.api.ApiRest; -import com.yf.exam.core.api.controller.BaseController; -import com.yf.exam.core.api.dto.PagingReqDTO; -import com.yf.exam.modules.user.exam.dto.request.UserExamReqDTO; -import com.yf.exam.modules.user.exam.dto.response.UserExamRespDTO; -import com.yf.exam.modules.user.exam.service.UserExamService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -/** -*

-* 考试记录控制器 -*

-* -* @author 聪明笨狗 -* @since 2020-09-21 15:13 -*/ -@Api(tags={"考试记录"}) -@RestController -@RequestMapping("/exam/api/user/exam") -public class UserExamController extends BaseController { - - @Autowired - private UserExamService baseService; - - - /** - * 分页查找 - * @param reqDTO - * @return - */ - @ApiOperation(value = "分页查找") - @RequestMapping(value = "/paging", method = { RequestMethod.POST}) - public ApiRest> paging(@RequestBody PagingReqDTO reqDTO) { - - //分页查询并转换 - IPage page = baseService.paging(reqDTO); - - return super.success(page); - } - - - /** - * 分页查找 - * @param reqDTO - * @return - */ - @ApiOperation(value = "分页查找") - @RequestMapping(value = "/my-paging", method = { RequestMethod.POST}) - public ApiRest> myPaging(@RequestBody PagingReqDTO reqDTO) { - - //分页查询并转换 - IPage page = baseService.myPaging(reqDTO); - - return super.success(page); - } -} diff --git a/src/main/java/com/guwan/backend/model/user/exam/dto/UserExamDTO.java b/src/main/java/com/guwan/backend/model/user/exam/dto/UserExamDTO.java deleted file mode 100644 index 5f9cb56..0000000 --- a/src/main/java/com/guwan/backend/model/user/exam/dto/UserExamDTO.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.guwan.backend.model.user.exam.dto; - -import com.yf.exam.core.annon.Dict; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; -import java.util.Date; - -/** -*

-* 考试记录数据传输类 -*

-* -* @author 聪明笨狗 -* @since 2020-09-21 15:13 -*/ -@Data -@ApiModel(value="考试记录", description="考试记录") -public class UserExamDTO implements Serializable { - - private static final long serialVersionUID = 1L; - - - private String id; - - @ApiModelProperty(value = "用户ID", required=true) - private String userId; - - @Dict(dictTable = "el_exam", dicText = "title", dicCode = "id") - @ApiModelProperty(value = "考试ID", required=true) - private String examId; - - @ApiModelProperty(value = "考试次数", required=true) - private Integer tryCount; - - @ApiModelProperty(value = "最高分数", required=true) - private Integer maxScore; - - @ApiModelProperty(value = "是否通过", required=true) - private Boolean passed; - - @ApiModelProperty(value = "创建时间") - private Date createTime; - - @ApiModelProperty(value = "更新时间") - private Date updateTime; - -} diff --git a/src/main/java/com/guwan/backend/model/user/exam/dto/request/UserExamReqDTO.java b/src/main/java/com/guwan/backend/model/user/exam/dto/request/UserExamReqDTO.java deleted file mode 100644 index 0ad7a53..0000000 --- a/src/main/java/com/guwan/backend/model/user/exam/dto/request/UserExamReqDTO.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.guwan.backend.model.user.exam.dto.request; - -import com.yf.exam.modules.user.exam.dto.UserExamDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** -*

-* 考试记录数据传输类 -*

-* -* @author 聪明笨狗 -* @since 2020-09-21 15:13 -*/ -@Data -@ApiModel(value="考试记录", description="考试记录") -public class UserExamReqDTO extends UserExamDTO { - - private static final long serialVersionUID = 1L; - - - @ApiModelProperty(value = "考试名称", required=true) - private String title; - - @ApiModelProperty(value = "人员名称", required=true) - private String realName; - - -} diff --git a/src/main/java/com/guwan/backend/model/user/exam/dto/response/UserExamRespDTO.java b/src/main/java/com/guwan/backend/model/user/exam/dto/response/UserExamRespDTO.java deleted file mode 100644 index 567fee5..0000000 --- a/src/main/java/com/guwan/backend/model/user/exam/dto/response/UserExamRespDTO.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.guwan.backend.model.user.exam.dto.response; - -import com.yf.exam.modules.user.exam.dto.UserExamDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** -*

-* 考试记录数据传输类 -*

-* -* @author 聪明笨狗 -* @since 2020-09-21 15:13 -*/ -@Data -@ApiModel(value="考试记录", description="考试记录") -public class UserExamRespDTO extends UserExamDTO { - - private static final long serialVersionUID = 1L; - - - @ApiModelProperty(value = "考试名称", required=true) - private String title; - - @ApiModelProperty(value = "人员名称", required=true) - private String realName; - -} diff --git a/src/main/java/com/guwan/backend/model/user/exam/entity/UserExam.java b/src/main/java/com/guwan/backend/model/user/exam/entity/UserExam.java deleted file mode 100644 index f4b6d1b..0000000 --- a/src/main/java/com/guwan/backend/model/user/exam/entity/UserExam.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.guwan.backend.model.user.exam.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.extension.activerecord.Model; -import lombok.Data; - -import java.util.Date; - -/** -*

-* 考试记录实体类 -*

-* -* @author 聪明笨狗 -* @since 2020-09-21 15:13 -*/ -@Data -@TableName("el_user_exam") -public class UserExam extends Model { - - private static final long serialVersionUID = 1L; - - @TableId(value = "id", type = IdType.ASSIGN_ID) - private String id; - - /** - * 用户ID - */ - @TableField("user_id") - private String userId; - - /** - * 考试ID - */ - @TableField("exam_id") - private String examId; - - /** - * 考试次数 - */ - @TableField("try_count") - private Integer tryCount; - - /** - * 最高分数 - */ - @TableField("max_score") - private Integer maxScore; - - /** - * 是否通过 - */ - private Boolean passed; - - /** - * 创建时间 - */ - @TableField("create_time") - private Date createTime; - - /** - * 更新时间 - */ - @TableField("update_time") - private Date updateTime; - -} diff --git a/src/main/java/com/guwan/backend/model/user/exam/mapper/UserExamMapper.java b/src/main/java/com/guwan/backend/model/user/exam/mapper/UserExamMapper.java deleted file mode 100644 index 92372c6..0000000 --- a/src/main/java/com/guwan/backend/model/user/exam/mapper/UserExamMapper.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.guwan.backend.model.user.exam.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.yf.exam.modules.user.exam.dto.request.UserExamReqDTO; -import com.yf.exam.modules.user.exam.dto.response.UserExamRespDTO; -import com.yf.exam.modules.user.exam.entity.UserExam; -import org.apache.ibatis.annotations.Param; - -/** -*

-* 考试记录Mapper -*

-* -* @author 聪明笨狗 -* @since 2020-09-21 15:13 -*/ -public interface UserExamMapper extends BaseMapper { - - /** - * 我的考试分页 - * @param page - * @param query - * @return - */ - IPage paging(Page page, @Param("query") UserExamReqDTO query); - -} diff --git a/src/main/java/com/guwan/backend/model/user/exam/service/UserExamService.java b/src/main/java/com/guwan/backend/model/user/exam/service/UserExamService.java deleted file mode 100644 index cf859b8..0000000 --- a/src/main/java/com/guwan/backend/model/user/exam/service/UserExamService.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.guwan.backend.model.user.exam.service; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.service.IService; -import com.yf.exam.core.api.dto.PagingReqDTO; -import com.yf.exam.modules.user.exam.dto.request.UserExamReqDTO; -import com.yf.exam.modules.user.exam.dto.response.UserExamRespDTO; -import com.yf.exam.modules.user.exam.entity.UserExam; - -/** -*

-* 考试记录业务类 -*

-* -* @author 聪明笨狗 -* @since 2020-09-21 15:13 -*/ -public interface UserExamService extends IService { - - /** - * 分页查询数据 - * @param reqDTO - * @return - */ - IPage paging(PagingReqDTO reqDTO); - - /** - * 分页查询数据 - * @param reqDTO - * @return - */ - IPage myPaging(PagingReqDTO reqDTO); - - - /** - * 考试完成后加入成绩 - * @param userId - * @param examId - * @param score - * @param passed - */ - void joinResult(String userId, String examId, Integer score, boolean passed); -} diff --git a/src/main/java/com/guwan/backend/model/user/exam/service/impl/UserExamServiceImpl.java b/src/main/java/com/guwan/backend/model/user/exam/service/impl/UserExamServiceImpl.java deleted file mode 100644 index 22d39fc..0000000 --- a/src/main/java/com/guwan/backend/model/user/exam/service/impl/UserExamServiceImpl.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.guwan.backend.model.user.exam.service.impl; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.yf.exam.core.api.dto.PagingReqDTO; -import com.yf.exam.modules.user.UserUtils; -import com.yf.exam.modules.user.exam.dto.request.UserExamReqDTO; -import com.yf.exam.modules.user.exam.dto.response.UserExamRespDTO; -import com.yf.exam.modules.user.exam.entity.UserExam; -import com.yf.exam.modules.user.exam.mapper.UserExamMapper; -import com.yf.exam.modules.user.exam.service.UserExamService; -import org.springframework.stereotype.Service; - -import java.util.Date; - -/** -*

-* 考试记录业务实现类 -*

-* -* @author 聪明笨狗 -* @since 2020-09-21 15:13 -*/ -@Service -public class UserExamServiceImpl extends ServiceImpl implements UserExamService { - - @Override - public IPage paging(PagingReqDTO reqDTO) { - - //转换结果 - IPage pageData = baseMapper.paging(reqDTO.toPage(), reqDTO.getParams()); - return pageData; - } - - @Override - public IPage myPaging(PagingReqDTO reqDTO) { - - UserExamReqDTO params = reqDTO.getParams(); - - - if(params==null){ - params = new UserExamReqDTO(); - } - - params.setUserId(UserUtils.getUserId()); - - - //转换结果 - IPage pageData = baseMapper.paging(reqDTO.toPage(), params); - return pageData; - } - - @Override - public void joinResult(String userId, String examId, Integer score, boolean passed) { - - //查询条件 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda().eq(UserExam::getUserId, userId) - .eq(UserExam::getExamId, examId); - - UserExam record = this.getOne(wrapper, false); - if(record == null){ - record = new UserExam(); - record.setCreateTime(new Date()); - record.setUpdateTime(new Date()); - record.setUserId(userId); - record.setExamId(examId); - record.setMaxScore(score); - record.setPassed(passed); - this.save(record); - return; - } - - // 修复低分数不加入统计问题 - record.setTryCount(record.getTryCount()+1); - record.setUpdateTime(new Date()); - - if(record.getMaxScore() < score){ - record.setMaxScore(score); - record.setPassed(passed); - } - - this.updateById(record); - - - } -} diff --git a/src/main/java/com/guwan/backend/service/impl/CourseServiceImpl.java b/src/main/java/com/guwan/backend/service/impl/CourseServiceImpl.java index 8218508..5c7bf4b 100644 --- a/src/main/java/com/guwan/backend/service/impl/CourseServiceImpl.java +++ b/src/main/java/com/guwan/backend/service/impl/CourseServiceImpl.java @@ -52,7 +52,7 @@ public class CourseServiceImpl extends ServiceImpl Collections.sort(words, (s1, s2) -> s2.length() - s1.length()); // 按长度降序 System.out.println(words); // 输出: [banana, cherry, apple] - + return null; }