下载通用组件

import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Target({ElementType.FIELD})
public @interface EnumOptions {

    Class<?> EnumType();

    String customEnumElement() default "";

    String customEnumView() default "";
}


import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Target({ElementType.FIELD})
public @interface Export {

    String name() default "";
}


public static <T> boolean doExport(Class<T> clz, List<T> dataList, OutputStream os) {
        try {
            StringBuffer buf = new StringBuffer();

            Field[] fields = clz.getDeclaredFields();

            List<Field> fieldList = Arrays.stream(fields).filter(field -> field.isAnnotationPresent(Export.class))
                    .collect(Collectors.toList());
            Map<String,Export> fieldMapping = new HashMap<>();
            fieldList.stream().forEach(element ->{
                Export export = element.getAnnotation(Export.class);
                buf.append(export.name()).append(CSV_COLUMN_SEPARATOR);
                fieldMapping.put(element.getName(),export);
            });
            buf.append(CSV_RN);
            if(null == dataList || dataList.size()==0){
                os.write(buf.toString().getBytes("GBK"));
                os.flush();
                return true;
            }
            Map<String, Map<String,String>> enumMappings = new HashMap<>();
            List<Field> fieldEnums = fieldList.stream().filter(field -> field.isAnnotationPresent(EnumOptions.class))
                     .collect(Collectors.toList());
            fieldEnums.stream().forEach(element ->{
                EnumOptions enumOptions = element.getAnnotation(EnumOptions.class);
                enumMappings.put(element.getName(),enumMapping(enumOptions));
            });

            dataList.stream().forEach(element ->{
              fieldList.stream().forEach(field->{
                  Object object =  BeanUtil.getProperty(field.getName(), element);
                  Map<String,String> map = enumMappings.get(field.getName());
                  if(map == null || map.isEmpty()){
                      buf.append(object).append(CSV_COLUMN_SEPARATOR);
                  }else {
                      buf.append(map.get(object.toString())).append(CSV_COLUMN_SEPARATOR);
                  }
              });
               buf.append(CSV_RN);
            });
            // 写出响应
            os.write(buf.toString().getBytes("GBK"));
            os.flush();
            return true;
        } catch (Exception e) {
            logger.error("doExport错误...", e);
        }
        return false;
    }

private static Map<String,String> enumMapping(EnumOptions enumOptions){
        Class enumType = enumOptions.EnumType();
        Object[] constants = enumType.getEnumConstants();
        Map<String, String> map = new HashMap<>(constants.length);
       try {
           Field field = enumType.getDeclaredField(enumOptions.customEnumElement());
           if (!field.isAccessible()) {
               field.setAccessible(true);
           }
           Field viewField = enumType.getDeclaredField(enumOptions.customEnumView());
           if (!viewField.isAccessible()) {
               viewField.setAccessible(true);
           }
           for (Object constant : constants) {
               String key = String.valueOf(field.get(constant));
               String view = String.valueOf(viewField.get(constant));
               if (key != null) {
                   map.put(key, view);
               }
           }
       }catch (Exception e){
            logger.error("enum mapping fail:{}",e);
       }
        return map;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值