|
|
@@ -0,0 +1,138 @@
|
|
|
+package org.dromara.xg.convert;
|
|
|
+
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
+import cn.idev.excel.converters.Converter;
|
|
|
+import cn.idev.excel.enums.CellDataTypeEnum;
|
|
|
+import cn.idev.excel.metadata.GlobalConfiguration;
|
|
|
+import cn.idev.excel.metadata.data.ReadCellData;
|
|
|
+import cn.idev.excel.metadata.data.WriteCellData;
|
|
|
+import cn.idev.excel.metadata.property.ExcelContentProperty;
|
|
|
+import org.dromara.common.core.utils.SpringUtils;
|
|
|
+import org.dromara.xg.domain.vo.StudentOptionVo;
|
|
|
+import org.dromara.xg.service.IXgDormViolationService;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 学生信息Excel转换器
|
|
|
+ * 将学生ID转换为学生详细信息(学号、姓名、学院名称、专业名称、班级名称)
|
|
|
+ *
|
|
|
+ * @author zlwu
|
|
|
+ * @date 2025-01-03
|
|
|
+ */
|
|
|
+public class StudentInfoExcelConvert implements Converter<String> {
|
|
|
+
|
|
|
+ private static final Logger log = LoggerFactory.getLogger(StudentInfoExcelConvert.class);
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Class<String> supportJavaTypeKey() {
|
|
|
+ return String.class;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public CellDataTypeEnum supportExcelTypeKey() {
|
|
|
+ return CellDataTypeEnum.STRING;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty,
|
|
|
+ GlobalConfiguration globalConfiguration) {
|
|
|
+ String value = cellData.getStringValue();
|
|
|
+ if (StrUtil.isBlank(value)) {
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ // 获取服务实例
|
|
|
+ IXgDormViolationService dormViolationService = SpringUtils.getBean(IXgDormViolationService.class);
|
|
|
+ if (dormViolationService == null) {
|
|
|
+ log.warn("无法获取宿舍违纪服务实例,返回原始值");
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 分割学号(逗号分隔)
|
|
|
+ String[] studentNoArray = value.split(",");
|
|
|
+ List<String> studentIdList = Arrays.stream(studentNoArray)
|
|
|
+ .map(String::trim)
|
|
|
+ .filter(StrUtil::isNotBlank)
|
|
|
+ .map(studentNo -> {
|
|
|
+ try {
|
|
|
+ StudentOptionVo student = dormViolationService.getStudentByStudentNo(studentNo);
|
|
|
+ if (student != null) {
|
|
|
+ return student.getId().toString();
|
|
|
+ } else {
|
|
|
+ log.warn("未找到学号为 {} 的学生", studentNo);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("根据学号查询学生信息失败,学号: {}", studentNo, e);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .filter(id -> id != null)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ return String.join(",", studentIdList);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("学号转学生ID失败,原始值: {}", value, e);
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public WriteCellData<String> convertToExcelData(String value, ExcelContentProperty contentProperty,
|
|
|
+ GlobalConfiguration globalConfiguration) {
|
|
|
+ if (StrUtil.isBlank(value)) {
|
|
|
+ return new WriteCellData<>("");
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ // 获取服务实例
|
|
|
+ IXgDormViolationService dormViolationService = SpringUtils.getBean(IXgDormViolationService.class);
|
|
|
+ if (dormViolationService == null) {
|
|
|
+ log.warn("无法获取宿舍违纪服务实例,返回原始值");
|
|
|
+ return new WriteCellData<>(value);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 分割学生ID(逗号分隔)
|
|
|
+ String[] idArray = value.split(",");
|
|
|
+ List<String> studentInfoList = Arrays.stream(idArray)
|
|
|
+ .map(String::trim)
|
|
|
+ .filter(StrUtil::isNotBlank)
|
|
|
+ .map(idStr -> {
|
|
|
+ try {
|
|
|
+ Long studentId = Long.parseLong(idStr);
|
|
|
+ StudentOptionVo student = dormViolationService.getStudentById(studentId);
|
|
|
+ if (student != null) {
|
|
|
+ // 格式:学号-姓名(学院-专业-班级)
|
|
|
+ return String.format("%s-%s(%s-%s-%s)",
|
|
|
+ student.getStudentNo(),
|
|
|
+ student.getName(),
|
|
|
+ student.getCollegeName(),
|
|
|
+ student.getMajorName(),
|
|
|
+ student.getClassName());
|
|
|
+ } else {
|
|
|
+ return idStr + "-未知学生";
|
|
|
+ }
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ log.warn("无效的学生ID格式: {}", idStr);
|
|
|
+ return idStr + "-格式错误";
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("查询学生信息失败,学生ID: {}", idStr, e);
|
|
|
+ return idStr + "-查询失败";
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ String convertedValue = String.join("; ", studentInfoList);
|
|
|
+ return new WriteCellData<>(convertedValue);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("学生信息转换失败,原始值: {}", value, e);
|
|
|
+ return new WriteCellData<>(value + "-转换失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|