diff --git a/admin-core/src/main/java/com/ibeetl/admin/core/util/BeanCopyUtil.java b/admin-core/src/main/java/com/ibeetl/admin/core/util/BeanCopyUtil.java index a8431a57..33547385 100644 --- a/admin-core/src/main/java/com/ibeetl/admin/core/util/BeanCopyUtil.java +++ b/admin-core/src/main/java/com/ibeetl/admin/core/util/BeanCopyUtil.java @@ -105,8 +105,8 @@ public class BeanCopyUtil extends BeanUtils { * @param * @return */ - public static List> BaseEntity2MapWithParallel(List target) { - return BaseEntity2MapWithParallel(target, (k, v, o) -> {}); + public static List> baseEntity2MapWithParallel(List target) { + return baseEntity2MapWithParallel(target, (k, v, o) -> {}); } /** @@ -115,7 +115,7 @@ public class BeanCopyUtil extends BeanUtils { * @param * @return */ - public static List> BaseEntity2MapWithParallel(List target, ThConsumer consumer) { + public static List> baseEntity2MapWithParallel(List target, ThConsumer consumer) { StopWatch sw = new StopWatch(); sw.start(); List> res = new ArrayList<>(); diff --git a/admin-core/src/main/java/com/ibeetl/admin/core/util/BeanUtil.java b/admin-core/src/main/java/com/ibeetl/admin/core/util/BeanUtil.java index ec0ee7f4..be880dac 100644 --- a/admin-core/src/main/java/com/ibeetl/admin/core/util/BeanUtil.java +++ b/admin-core/src/main/java/com/ibeetl/admin/core/util/BeanUtil.java @@ -6,14 +6,15 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.ReflectUtil; import cn.hutool.json.JSONUtil; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ibeetl.admin.core.entity.BaseEntity; import org.springframework.util.MultiValueMap; import org.springframework.util.MultiValueMapAdapter; +import javax.validation.constraints.NotNull; +import java.lang.annotation.Annotation; import java.lang.reflect.Field; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; /** @@ -97,4 +98,29 @@ public class BeanUtil extends cn.hutool.core.bean.BeanUtil { } } + + /** + * 阿里的easyExcel 注解解析的简单实现。 + * value只支持单个 + * 只用到 value和 index + * + * @param object + */ + public static void processExcelAnnotation(@NotNull Class object) { + Map result = new TreeMap<>(); + + for (Field declaredField : object.getDeclaredFields()) { + Annotation[] declaredAnnotations = declaredField.getDeclaredAnnotations(); + for (Annotation declaredAnnotation : declaredAnnotations) { + // 判断是否是easyExcel 的注解 + if (declaredAnnotation instanceof ExcelProperty) { + ExcelProperty excelProperty = (ExcelProperty) declaredAnnotation; + String title = excelProperty.value()[0]; + int index = excelProperty.index(); + result.put(declaredField.getName(), title); + ; + } + } + } + } } diff --git a/web/src/main/java/com/ibeetl/jlw/entity/vo/TeacherOpenCourseQuestionTestDetailVO.java b/web/src/main/java/com/ibeetl/jlw/entity/vo/TeacherOpenCourseQuestionTestDetailVO.java index fffa7b4c..6e8d3a6f 100644 --- a/web/src/main/java/com/ibeetl/jlw/entity/vo/TeacherOpenCourseQuestionTestDetailVO.java +++ b/web/src/main/java/com/ibeetl/jlw/entity/vo/TeacherOpenCourseQuestionTestDetailVO.java @@ -1,5 +1,7 @@ package com.ibeetl.jlw.entity.vo; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ibeetl.admin.core.entity.BaseEntity; import lombok.Data; import lombok.EqualsAndHashCode; @@ -10,7 +12,7 @@ import lombok.EqualsAndHashCode; */ @Data @EqualsAndHashCode(callSuper=false) -public class TeacherOpenCourseQuestionTestDetailVO { +public class TeacherOpenCourseQuestionTestDetailVO extends BaseEntity { /** * 学生ID @@ -20,41 +22,49 @@ public class TeacherOpenCourseQuestionTestDetailVO { /** * 学生编号 */ + @ExcelProperty(value = "学生编号", index = 1) private String studentSn; /** * 学生名字 */ + @ExcelProperty(value = "学生名字", index = 2) private String studentName; /** * 班级名称 */ + @ExcelProperty(value = "班级名称", index = 3) private String className; /** * 完成时间 */ + @ExcelProperty(value = "完成时间", index = 4) private String finishTime; /** * 答对数量 */ + @ExcelProperty(value = "答对数量", index = 5) private Integer correctCount; /** * 答错数量 */ + @ExcelProperty(value = "答错数量", index = 6) private Integer wrongCount; /** * 正确率 最大100 */ + @ExcelProperty(value = "正确率 (100)%", index = 7) private Integer correctRate; /** * 总得分 */ + @ExcelProperty(value = "总得分", index = 8) private Float totalScore; } diff --git a/web/src/main/java/com/ibeetl/jlw/web/ResourcesQuestionSnapshotController.java b/web/src/main/java/com/ibeetl/jlw/web/ResourcesQuestionSnapshotController.java index 32554528..dcd17a96 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/ResourcesQuestionSnapshotController.java +++ b/web/src/main/java/com/ibeetl/jlw/web/ResourcesQuestionSnapshotController.java @@ -1,6 +1,8 @@ package com.ibeetl.jlw.web; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; import cn.jlw.Interceptor.SCoreUser; import cn.jlw.validate.ValidateConfig; import com.ibeetl.admin.core.annotation.Function; @@ -11,6 +13,7 @@ import com.ibeetl.jlw.entity.ResourcesQuestionSnapshot; import com.ibeetl.jlw.entity.TeacherOpenCourseQuestionLogScoreInfo; import com.ibeetl.jlw.entity.TeacherOpenCourseQuestionTestSimpleInfo; import com.ibeetl.jlw.entity.dto.TeacherOpenCourseQuestionTestDetailDTO; +import com.ibeetl.jlw.entity.vo.TeacherOpenCourseQuestionTestDetailVO; import com.ibeetl.jlw.service.ResourcesQuestionSnapshotService; import com.ibeetl.jlw.web.query.ResourcesQuestionSnapshotQuery; import org.apache.commons.lang3.StringUtils; @@ -26,16 +29,24 @@ import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.ModelAndView; +import java.io.IOException; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import java.util.Set; +import static com.ibeetl.admin.core.util.BeanCopyUtil.baseEntity2MapWithParallel; +import static com.ibeetl.admin.core.util.ExcelUtil.convertData; +import static com.ibeetl.admin.core.util.ExcelUtil.write; +import static com.ibeetl.admin.core.util.user.CacheUserUtil.getUser; + /** * 题目快照 资源管理 - 题库管理-快照-关联来源 接口 * 切记不要对非线程安全的静态变量进行写操作 */ @RestController -public class ResourcesQuestionSnapshotController{ +public class ResourcesQuestionSnapshotController extends BaseController { private final Log log = LogFactory.getLog(this.getClass()); private static final String MODEL = "/jlw/resourcesQuestionSnapshot"; @@ -120,6 +131,38 @@ public class ResourcesQuestionSnapshotController{ } + /** + * 教师端-获取题目的练习成绩 + * 支持根据来源类型查询 + * + * @param condition + * @return + */ + @PostMapping(API + "/exportQuestionTestResults.do") + public void exportQuestionTestResults(TeacherOpenCourseQuestionTestDetailDTO condition) throws IOException { + Assert.notNull(getUser(), "请登录后再操作"); + + /** 构建表头 */ + Map header = new LinkedHashMap<>(11); + header.put("studentName", "学生姓名"); + header.put("studentSn", "学号"); + header.put("teacherOpenCourseIdText", "开课名称"); + header.put("className", "班级名称"); + header.put("finishTime", "完成时间"); + header.put("correctCount", "答对数量"); + header.put("wrongCount", "答错数量"); + header.put("correctRate", "正确率 (100)%"); + header.put("totalScore", "总得分"); + + PageQuery data = resourcesQuestionSnapshotService.questionTestResults(condition.getPageQuery()); + + List> maps = baseEntity2MapWithParallel(data.getList()); + + String filename = StrUtil.format("签到日志导出 {}.xlsx", DateUtil.formatDate(DateUtil.date())); + write(response, filename,"Sheet1", header.values(), convertData(header.keySet(), maps)); + } + + /* 后台页面 */ @GetMapping(MODEL + "/index.do") diff --git a/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseStudentSigninLogController.java b/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseStudentSigninLogController.java index 93424785..8e327e76 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseStudentSigninLogController.java +++ b/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseStudentSigninLogController.java @@ -10,6 +10,7 @@ import cn.jlw.validate.ValidateConfig; import com.ibeetl.admin.core.annotation.Function; import com.ibeetl.admin.core.entity.CoreUser; import com.ibeetl.admin.core.file.FileService; +import com.ibeetl.admin.core.util.BeanCopyUtil; import com.ibeetl.admin.core.util.PlatformException; import com.ibeetl.admin.core.util.TimeTool; import com.ibeetl.admin.core.web.JsonResult; @@ -45,7 +46,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import static com.ibeetl.admin.core.util.BeanCopyUtil.BaseEntity2MapWithParallel; import static com.ibeetl.admin.core.util.ExcelUtil.convertData; import static com.ibeetl.admin.core.util.ExcelUtil.write; @@ -165,7 +165,7 @@ public class TeacherOpenCourseStudentSigninLogController{ List datas = teacherOpenCourseStudentSigninLogService.getValuesByQueryNotWithPermission(condition); - List> maps = BaseEntity2MapWithParallel(datas); + List> maps = BeanCopyUtil.baseEntity2MapWithParallel(datas); String filename = StrUtil.format("签到日志导出 {}.xlsx", DateUtil.formatDate(DateUtil.date())); write(resp, filename,"Sheet1", header.values(), convertData(header.keySet(), maps)); diff --git a/web/src/main/java/com/ibeetl/jlw/web/UniversitiesCollegesController.java b/web/src/main/java/com/ibeetl/jlw/web/UniversitiesCollegesController.java index 54bf72d4..f4006f57 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/UniversitiesCollegesController.java +++ b/web/src/main/java/com/ibeetl/jlw/web/UniversitiesCollegesController.java @@ -10,6 +10,7 @@ import com.ibeetl.admin.core.entity.CoreUser; import com.ibeetl.admin.core.file.FileService; import com.ibeetl.admin.core.service.CorePlatformService; import com.ibeetl.admin.core.service.CoreUserService; +import com.ibeetl.admin.core.util.BeanCopyUtil; import com.ibeetl.admin.core.util.HttpRequestLocal; import com.ibeetl.admin.core.util.PlatformException; import com.ibeetl.admin.core.web.JsonResult; @@ -36,7 +37,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import static com.ibeetl.admin.core.util.BeanCopyUtil.BaseEntity2MapWithParallel; import static com.ibeetl.admin.core.util.ExcelUtil.convertData; import static com.ibeetl.admin.core.util.ExcelUtil.write; import static com.ibeetl.admin.core.util.user.CacheUserUtil.getUser; @@ -228,7 +228,7 @@ public class UniversitiesCollegesController{ List datas = universitiesCollegesService.getValues(param); - List> maps = BaseEntity2MapWithParallel(datas); + List> maps = BeanCopyUtil.baseEntity2MapWithParallel(datas); String filename = StrUtil.format("院校导出 {}.xlsx", DateUtil.formatDate(DateUtil.date())); write(resp, filename,"Sheet1", header.values(), convertData(header.keySet(), maps));