由于甘特图的任务id必须是0-9的数字,所以这里的任务id为rid,id字段为数据库中的逐渐。
下面两个方法为核心方法。
//定义一个空有序集合
List<GanttViewBean> resultList = new ArrayList<GanttViewBean>();
//将获取的数据进行级联排序
private List<GanttViewBean> compareList(List<GanttViewBean> dataList) {
if (!dataList.isEmpty()) {
for (GanttViewBean gvb : dataList) {
if (gvb.getParent().equals("0")) {
resultList.add(gvb);
for (int i = 0; i < dataList.size(); i++) {
put2List(dataList, gvb.getRid(), dataList.get(i));
}
}
}
}
return resultList;
}
//递归
/**
*dataList:数据集合
*rid:父任务id
*gvb:当前任务对象,用于获取当前任务的父id
*/
public void put2List(List<GanttViewBean> dataList, String rid,
GanttViewBean gvb) {
if (rid.equals(gvb.getParent())) {
resultList.add(gvb);
for (int n = 0; n < dataList.size(); n++) {
put2List(dataList, gvb.getRid(), dataList.get(n));
}
}
}
//下面是bean类,为了节省空间,构造器就不贴了.
public class GanttViewBean {
String id = ""; // ID
String rid = "";// rid
String name = ""; // 名称
String start = ""; // 开始日期
String end = ""; // 结束日期
String color = ""; // 颜色
String link = ""; // 链接
String complete = ""; // 完成度
String group = ""; // 分组
String mileStone = ""; // 里程碑
String resource = ""; // 资源
String parent = ""; // 上级任务ID
String open = "0"; // 是否展开
String dependency = ""; // 依赖任务
String caption = ""; // 标题
String isGroup = StringUtil.isBlank(group) ? "0" : group; // 是否分组
String isMileStone = StringUtil.isBlank(mileStone) ? "0" : mileStone; // 是否里程碑
}