1 /**
2 * ***************************************************************************3 *模块名 :4 *创建时间 : 2017年9月7日5 *实现功能 :树形结构处理工具类6 *作者 : 揣怀梦想的猪7 *版本 : v0.0.18 -----------------------------------------------------------------------------9 *修改记录:10 *日 期 版本 修改人 修改内容11 *2017年9月7日 v0.0.1 揣怀梦想的猪 创建12 ****************************************************************************13 */
14 public classTreeUtils {15 private static final String COLUMN_ID_LOWCASE = "categoryCode"; //编号字段
16 private static final String COLUMN_CHILDREN = "children";17 private static final String PARENT_FIELD_NAME="parentCode";18 private static Logger logger = LoggerFactory.getLogger(TreeUtils.class);19
20 /**
21 * ====================================================================22 *函 数 名:23 *@paramparent24 *@paramtreeDataList25 *@return
26 *功 能: 通过父节点获取子节点生成树形结构数据27 ----------------------------------------------------------------------28 *修改记录 :29 *日 期 版本 修改人 修改内容30 *2017年8月31日 v0.0.1 揣怀梦想的猪 创建31 ====================================================================32 */
33 public static List treeNode(String parent, ListtreeDataList) {34 List trees = null;35 try{36 if (trees == null) {37 trees = new ArrayList();38 }39
40 if (treeDataList == null) {41 returntrees;42 }43
44 for(T t : treeDataList) {45 if(getFiledVal(t,PARENT_FIELD_NAME).equals(parent)) {46 setFiledVal(t,COLUMN_CHILDREN,treeNode(getFiledVal(t,COLUMN_ID_LOWCASE), treeDataList));47 trees.add(t);48 }49 }50 } catch(Exception e) {51 logger.error("递归生成树节点错误: " +e);52 }53
54 returntrees;55 }56
57
58 public static List treeNodeList(String parent, ListtreeDataList){59 return treeNodeList(parent, treeDataList,null);60 }61
62
63 /**
64 * ====================================================================65 *函 数 名:66 *@paramparent 传入当前节点名称67 *@paramtreeDataList68 *@return
69 *@return
70 *功 能: 通过父节点获取子节点返回列表结构数据71 ----------------------------------------------------------------------72 *修改记录 :73 *日 期 版本 修改人 修改内容74 *2017年8月31日 v0.0.1 揣怀梦想的猪 创建75 ====================================================================76 */
77 private static List treeNodeList(String parent, List treeDataList,Listtrees) {78 try{79
80 if (treeDataList == null) {81 returntrees;82 }83
84 for(T t : treeDataList) {85 if(getFiledVal(t,PARENT_FIELD_NAME).equals(parent)) {86 trees.add(t);87 treeNodeList(getFiledVal(t,COLUMN_ID_LOWCASE), treeDataList,trees);88 }89 }90 } catch(Exception e) {91 logger.error("递归生成树节点错误: " +e);92 }93
94 returntrees;95 }96
97
98 public static Map childToParentNode(String parent, ListtreeDataList){99 return childToParentNode(parent,treeDataList,null);100 }101
102 /**
103 * ====================================================================104 *函 数 名:105 *@paramparent 传入子节点对应的上级节点106 *@paramtreeDataList 数据源107 *@paramtrees 获取到的父节点数据108 *@paramuser109 *@return
110 *功 能:通过子节点获取到对应父节点数据111 ----------------------------------------------------------------------112 *修改记录 :113 *日 期 版本 修改人 修改内容114 *2017年8月31日 v0.0.1 揣怀梦想的猪 创建115 ====================================================================116 */
117 public static Map childToParentNode(String parent, ListtreeDataList,118 Maptrees) {119 try{120 if (trees == null) {121 trees = new HashMap();122 }123
124 if (treeDataList == null) {125 returntrees;126 }127
128 for(T t : treeDataList) {129 if(getFiledVal(t, COLUMN_ID_LOWCASE).equals(parent)) {130 trees.put(getFiledVal(t, COLUMN_ID_LOWCASE), t);131 childToParentNode(getFiledVal(t, PARENT_FIELD_NAME), treeDataList, trees);132 break;133 }134 }135 } catch(Exception e) {136 logger.error("执行childToParentNode时发生错误: " +e);137 }138
139 returntrees;140 }141
142 /**
143 * ====================================================================144 *函 数 名:145 *@paramt146 *@paramname147 *@return
148 *功 能: 获取字段值149 ----------------------------------------------------------------------150 *修改记录 :151 *日 期 版本 修改人 修改内容152 *2017年9月6日 v0.0.1 揣怀梦想的猪 创建153 ====================================================================154 */
155 private static String getFiledVal(T t, String name) {156 try{157 Field[] fields =t.getClass().getDeclaredFields();158 for (int i = 0,j=fields.length; i
164 Object obj=fields[i].get(t);165 if(obj==null){166 return "";167 }else{168 returnobj.toString();169 }170 } else if (fields[i].getType().getName().equals(java.lang.Integer.class.getName())171 || fields[i].getType().getName().equals("int")) {172 //Integer type
173 Object obj=fields[i].get(t);174 if(obj==null){175 return "";176 }else{177 returnString.valueOf(obj);178 }179 }180 }181 }182 } catch(Exception ex) {183 ex.printStackTrace();184 }185
186 return "";187 }188
189 /**
190 * ====================================================================191 *函 数 名:192 *@paramt193 *@paramname194 *@paramvalue195 *功 能:196 ----------------------------------------------------------------------197 *修改记录 :198 *日 期 版本 修改人 修改内容199 *2017年9月6日 v0.0.1 揣怀梦想的猪 创建200 ====================================================================201 */
202 public static void setFiledVal(T t, String name, Listlist) {203 try{204 Field[] fields =t.getClass().getDeclaredFields();205 for (int i = 0; i < fields.length; i++) {206 fields[i].setAccessible(true);207 if(name.equals(fields[i].getName())) {208 fields[i].set(t, list);209 break;210 }211 }212 } catch(Exception e) {213 e.printStackTrace();214 }215 }216
217 public static voidmain(String[] args) {218 ScmMaterialCategoryVo vo=newScmMaterialCategoryVo();219 List list=new ArrayList<>();220 ScmMaterialCategoryVo temp=newScmMaterialCategoryVo();221 temp.setCategoryCode("测试赛");222 list.add(temp);223 setFiledVal(vo, "children", list);224 System.out.println(vo);225 }226 }