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 be880dac..ce40a4db 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 @@ -8,14 +8,15 @@ 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.core.annotation.AnnotationUtils; 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.*; import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; /** *

@@ -104,23 +105,29 @@ public class BeanUtil extends cn.hutool.core.bean.BeanUtil { * value只支持单个 * 只用到 value和 index * - * @param object + * @param clazz + * @return */ - public static void processExcelAnnotation(@NotNull Class object) { - Map result = new TreeMap<>(); + public static Map processExcelAnnotationToMap(@NotNull Class clazz) { + Map result = new ConcurrentHashMap<>(16); - 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); - ; - } - } - } + // 过滤有指定注解的属性 + Set filterFields = Arrays.stream(clazz.getDeclaredFields()) + .filter(declaredField -> ObjectUtil.isNotNull(AnnotationUtils.findAnnotation(declaredField, ExcelProperty.class))) + .collect(Collectors.toSet()); + + // 根据index属性排序,并放置到Map的返回值中 + filterFields.stream().sorted(Comparator.comparingInt(o -> AnnotationUtils.findAnnotation(o, ExcelProperty.class).index())) + .forEachOrdered(field -> { + ExcelProperty annotation = AnnotationUtils.findAnnotation(field, ExcelProperty.class); + String title = annotation.value()[0]; + String name = field.getName(); + // 防止覆盖 + if (!result.containsKey(name)) { + result.put(name, title); + } + }); + + return result; } } 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 dcd17a96..28789bb1 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/ResourcesQuestionSnapshotController.java +++ b/web/src/main/java/com/ibeetl/jlw/web/ResourcesQuestionSnapshotController.java @@ -146,7 +146,6 @@ public class ResourcesQuestionSnapshotController extends BaseController { Map header = new LinkedHashMap<>(11); header.put("studentName", "学生姓名"); header.put("studentSn", "学号"); - header.put("teacherOpenCourseIdText", "开课名称"); header.put("className", "班级名称"); header.put("finishTime", "完成时间"); header.put("correctCount", "答对数量"); @@ -154,6 +153,8 @@ public class ResourcesQuestionSnapshotController extends BaseController { header.put("correctRate", "正确率 (100)%"); header.put("totalScore", "总得分"); +// Map header = processExcelAnnotationToMap(TeacherOpenCourseQuestionTestDetailVO.class); + PageQuery data = resourcesQuestionSnapshotService.questionTestResults(condition.getPageQuery()); List> maps = baseEntity2MapWithParallel(data.getList());