提交修改
This commit is contained in:
parent
4964c6dc7c
commit
deee61074b
@ -8,4 +8,7 @@ import java.lang.annotation.*;
|
|||||||
public @interface TaskHeader {
|
public @interface TaskHeader {
|
||||||
|
|
||||||
String value ( ) default "";
|
String value ( ) default "";
|
||||||
|
|
||||||
|
|
||||||
|
int order() default 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,38 +1,45 @@
|
|||||||
package com.lz.modules.app.dto;
|
package com.lz.modules.app.dto;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.lz.common.annotation.TaskHeader;
|
import com.lz.common.annotation.TaskHeader;
|
||||||
|
import com.lz.modules.app.utils.t.Tuple;
|
||||||
|
import com.lz.modules.app.utils.t.TwoTuple;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class ResultDto {
|
public class ResultDto {
|
||||||
@TaskHeader("index")
|
@TaskHeader(value = "index", order = 0)
|
||||||
private int index;
|
private Integer index;
|
||||||
@TaskHeader("id")
|
@TaskHeader(value = "id", order = 1)
|
||||||
private Long id;
|
private Long id;
|
||||||
@TaskHeader("内容")
|
@TaskHeader(value = "内容", order = 2)
|
||||||
private String content;
|
private String content;
|
||||||
@TaskHeader("进度") //返回值如30%, 如果没有可以不填写
|
@TaskHeader(value = "进度", order = 3) //返回值如30%, 如果没有可以不填写
|
||||||
private String rate;
|
private String rate;
|
||||||
|
|
||||||
public ResultDto() {
|
public ResultDto() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public ResultDto(@TaskHeader("索引") int index, @TaskHeader("Id") Long id, @TaskHeader("内容") String content) {
|
public ResultDto(@TaskHeader("索引") Integer index, @TaskHeader("Id") Long id, @TaskHeader("内容") String content) {
|
||||||
this.index = index;
|
this.index = index;
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.content = content;
|
this.content = content;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
ResultDto resultDto1 = new ResultDto(0,10l,"哈哈0");
|
public ResultDto(@TaskHeader("index") Integer index, @TaskHeader("id") Long id, @TaskHeader("内容") String content, @TaskHeader("进度") String rate) {
|
||||||
ResultDto resultDto2 = new ResultDto(1,11l,"哈哈1");
|
this.index = index;
|
||||||
ResultDto resultDto3 = new ResultDto(2,12l,"哈哈2");
|
this.id = id;
|
||||||
ResultDto resultDto4 = new ResultDto(3,13l,"哈哈3");
|
this.content = content;
|
||||||
ResultDto [] array = new ResultDto[]{resultDto1,resultDto2,resultDto3,resultDto4};
|
this.rate = rate;
|
||||||
List<ResultDto> resultDtos = Arrays.asList(array);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
130
src/main/java/com/lz/modules/third/utils/TaskConvertUtils.java
Normal file
130
src/main/java/com/lz/modules/third/utils/TaskConvertUtils.java
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
package com.lz.modules.third.utils;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.lz.common.annotation.TaskHeader;
|
||||||
|
import com.lz.modules.app.dto.ResultDto;
|
||||||
|
import com.lz.modules.app.utils.t.Tuple;
|
||||||
|
import com.lz.modules.app.utils.t.TwoTuple;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class TaskConvertUtils {
|
||||||
|
|
||||||
|
public static Tuple convert(List<ResultDto> resultDtos) throws Exception {
|
||||||
|
Field[] fields = sortFields(ResultDto.class.getDeclaredFields());
|
||||||
|
List<String> header = new ArrayList<>();
|
||||||
|
for (Field field : fields) {
|
||||||
|
TaskHeader taskHeader = field.getAnnotation(TaskHeader.class);
|
||||||
|
header.add(taskHeader.value());
|
||||||
|
}
|
||||||
|
Method[] methodLengths = sortMethods(ResultDto.class.getMethods());
|
||||||
|
boolean[] indexs = new boolean[methodLengths.length];
|
||||||
|
List<List<String>> data = new ArrayList<>();
|
||||||
|
for (ResultDto resultDto : resultDtos) {
|
||||||
|
Method[] methods = methodLengths;
|
||||||
|
List<String> methodValueList = new ArrayList<>();
|
||||||
|
for (int i = 0; i < methods.length; i++) {
|
||||||
|
String methodName = methods[i].getName();
|
||||||
|
if (!methodName.equals("getId")) {
|
||||||
|
Object object = methods[i].invoke(resultDto, null);
|
||||||
|
if (object != null && object != "") {
|
||||||
|
indexs[i] = true;
|
||||||
|
methodValueList.add(object + "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
data.add(methodValueList);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < indexs.length; i++) {
|
||||||
|
if (!indexs[i]) {
|
||||||
|
header.remove(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Tuple(header, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static Field[] sortFields(Field[] fields) {
|
||||||
|
// 用来存放所有的属性域
|
||||||
|
List<Field> fieldList = new ArrayList<>();
|
||||||
|
// 过滤带有注解的Field
|
||||||
|
for (Field f : fields) {
|
||||||
|
if (f.getAnnotation(TaskHeader.class) != null) {
|
||||||
|
fieldList.add(f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 这个比较排序的语法依赖于java 1.8
|
||||||
|
fieldList.sort(Comparator.comparingInt(
|
||||||
|
f -> f.getAnnotation(TaskHeader.class).order()
|
||||||
|
));
|
||||||
|
return fieldList.toArray(new Field[fieldList.size()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String captureName(String name) {
|
||||||
|
char[] cs = name.toCharArray();
|
||||||
|
cs[0] += 32;
|
||||||
|
return String.valueOf(cs);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static Method[] sortMethods(Method[] methods) {
|
||||||
|
// 用来存放所有的属性域
|
||||||
|
List<Method> methodList = new ArrayList<>();
|
||||||
|
// 过滤带有注解的Field
|
||||||
|
for (Method m : methods) {
|
||||||
|
String mname = m.getName();
|
||||||
|
if ((mname.startsWith("get") || mname.startsWith("Get")) && !"getClass".equals(m.getName())) {
|
||||||
|
Class clas = m.getDeclaringClass();
|
||||||
|
String a = mname.substring(3);
|
||||||
|
a = captureName(a);
|
||||||
|
try {
|
||||||
|
Field field = clas.getDeclaredField(a);
|
||||||
|
if (field.getAnnotation(TaskHeader.class) != null) {
|
||||||
|
methodList.add(m);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
// 这个比较排序的语法依赖于java 1.8
|
||||||
|
methodList.sort(Comparator.comparingInt(
|
||||||
|
m -> {
|
||||||
|
String mname = m.getName();
|
||||||
|
Class clas = m.getDeclaringClass();
|
||||||
|
String a = mname.substring(3);
|
||||||
|
a = captureName(a);
|
||||||
|
try {
|
||||||
|
Field field = clas.getDeclaredField(a);
|
||||||
|
int sort = field.getAnnotation(TaskHeader.class).order();
|
||||||
|
return sort;
|
||||||
|
} catch (NoSuchFieldException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return 9999;
|
||||||
|
}
|
||||||
|
));
|
||||||
|
return methodList.toArray(new Method[methodList.size()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
ResultDto resultDto1 = new ResultDto(0, 10l, "哈哈0");
|
||||||
|
ResultDto resultDto2 = new ResultDto(1, 11l, "哈哈1");
|
||||||
|
ResultDto resultDto3 = new ResultDto(2, 12l, "哈哈2");
|
||||||
|
ResultDto resultDto4 = new ResultDto(3, 13l, "哈哈3", "30%");
|
||||||
|
ResultDto[] array = new ResultDto[]{resultDto1, resultDto2, resultDto3, resultDto4};
|
||||||
|
List<ResultDto> resultDtos = Arrays.asList(array);
|
||||||
|
TwoTuple<List<String>, List<List<String>>> data = convert(resultDtos).getData();
|
||||||
|
System.out.println(JSON.toJSONString(data.getFirst()));
|
||||||
|
System.out.println(JSON.toJSONString(data.getSecond()));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user