Digital Office Automation System Backend
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

ExcelEnumConvert.java 2.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package com.ruoyi.common.convert;
  2. import cn.hutool.core.annotation.AnnotationUtil;
  3. import cn.hutool.core.convert.Convert;
  4. import cn.hutool.core.util.ObjectUtil;
  5. import com.alibaba.excel.converters.Converter;
  6. import com.alibaba.excel.enums.CellDataTypeEnum;
  7. import com.alibaba.excel.metadata.GlobalConfiguration;
  8. import com.alibaba.excel.metadata.data.ReadCellData;
  9. import com.alibaba.excel.metadata.data.WriteCellData;
  10. import com.alibaba.excel.metadata.property.ExcelContentProperty;
  11. import com.ruoyi.common.annotation.ExcelEnumFormat;
  12. import com.ruoyi.common.utils.reflect.ReflectUtils;
  13. import lombok.extern.slf4j.Slf4j;
  14. import java.lang.reflect.Field;
  15. import java.util.HashMap;
  16. import java.util.Map;
  17. /**
  18. * 枚举格式化转换处理
  19. *
  20. * @author Liang
  21. */
  22. @Slf4j
  23. public class ExcelEnumConvert implements Converter<Object> {
  24. @Override
  25. public Class<Object> supportJavaTypeKey() {
  26. return Object.class;
  27. }
  28. @Override
  29. public CellDataTypeEnum supportExcelTypeKey() {
  30. return null;
  31. }
  32. @Override
  33. public Object convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
  34. Object codeValue = cellData.getData();
  35. // 如果是空值
  36. if (ObjectUtil.isNull(codeValue)) {
  37. return null;
  38. }
  39. Map<Object, String> enumValueMap = beforeConvert(contentProperty);
  40. String textValue = enumValueMap.get(codeValue);
  41. return Convert.convert(contentProperty.getField().getType(), textValue);
  42. }
  43. @Override
  44. public WriteCellData<String> convertToExcelData(Object object, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
  45. if (ObjectUtil.isNull(object)) {
  46. return new WriteCellData<>("");
  47. }
  48. Map<Object, String> enumValueMap = beforeConvert(contentProperty);
  49. String value = Convert.toStr(enumValueMap.get(object), "");
  50. return new WriteCellData<>(value);
  51. }
  52. private Map<Object, String> beforeConvert(ExcelContentProperty contentProperty) {
  53. ExcelEnumFormat anno = getAnnotation(contentProperty.getField());
  54. Map<Object, String> enumValueMap = new HashMap<>();
  55. Enum<?>[] enumConstants = anno.enumClass().getEnumConstants();
  56. for (Enum<?> enumConstant : enumConstants) {
  57. Object codeValue = ReflectUtils.invokeGetter(enumConstant, anno.codeField());
  58. String textValue = ReflectUtils.invokeGetter(enumConstant, anno.textField());
  59. enumValueMap.put(codeValue, textValue);
  60. }
  61. return enumValueMap;
  62. }
  63. private ExcelEnumFormat getAnnotation(Field field) {
  64. return AnnotationUtil.getAnnotation(field, ExcelEnumFormat.class);
  65. }
  66. }