ExcelDictConvert.java 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package com.ruoyi.common.convert;
  2. import cn.hutool.core.annotation.AnnotationUtil;
  3. import cn.hutool.core.convert.Convert;
  4. import com.alibaba.excel.converters.Converter;
  5. import com.alibaba.excel.enums.CellDataTypeEnum;
  6. import com.alibaba.excel.metadata.CellData;
  7. import com.alibaba.excel.metadata.GlobalConfiguration;
  8. import com.alibaba.excel.metadata.property.ExcelContentProperty;
  9. import com.ruoyi.common.annotation.ExcelDictFormat;
  10. import com.ruoyi.common.core.service.DictService;
  11. import com.ruoyi.common.utils.StringUtils;
  12. import com.ruoyi.common.utils.poi.ExcelUtil;
  13. import com.ruoyi.common.utils.spring.SpringUtils;
  14. import lombok.extern.slf4j.Slf4j;
  15. import java.lang.reflect.Field;
  16. /**
  17. * 字典格式化转换处理
  18. *
  19. * @author Lion Li
  20. */
  21. @Slf4j
  22. public class ExcelDictConvert implements Converter<Object> {
  23. @Override
  24. public Class<Object> supportJavaTypeKey() {
  25. return Object.class;
  26. }
  27. @Override
  28. public CellDataTypeEnum supportExcelTypeKey() {
  29. return null;
  30. }
  31. @Override
  32. public Object convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
  33. ExcelDictFormat anno = getAnnotation(contentProperty.getField());
  34. String type = anno.dictType();
  35. String label = cellData.getStringValue();
  36. String value;
  37. if (StringUtils.isBlank(type)) {
  38. value = ExcelUtil.reverseByExp(label, anno.readConverterExp(), anno.separator());
  39. } else {
  40. value = SpringUtils.getBean(DictService.class).getDictValue(type, label, anno.separator());
  41. }
  42. return Convert.convert(contentProperty.getField().getType(), value);
  43. }
  44. @Override
  45. public CellData<String> convertToExcelData(Object object, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
  46. if (StringUtils.isNull(object)) {
  47. return new CellData<>("");
  48. }
  49. ExcelDictFormat anno = getAnnotation(contentProperty.getField());
  50. String type = anno.dictType();
  51. String value = Convert.toStr(object);
  52. String label;
  53. if (StringUtils.isBlank(type)) {
  54. label = ExcelUtil.convertByExp(value, anno.readConverterExp(), anno.separator());
  55. } else {
  56. label = SpringUtils.getBean(DictService.class).getDictLabel(type, value, anno.separator());
  57. }
  58. return new CellData<>(label);
  59. }
  60. private ExcelDictFormat getAnnotation(Field field) {
  61. return AnnotationUtil.getAnnotation(field, ExcelDictFormat.class);
  62. }
  63. }