说明
模糊搜索菜单名称,展示匹配的所有父节点及当前菜单列表
代码块
//保存模糊匹配的所有菜单数据
private List<CdglOperation> cdmcList = new ArrayList<CdglOperation>();
@Override
public List<CdglOperation> select(CdglOperation cdgl) {
cdmcList.clear();
long start = System.currentTimeMillis();
//获取库中所有的菜单列表
List<CdglOperation> cdglList = cdglSelectMapper.select(null);
//判断菜单名称是否输入
if(cdgl!=null && cdgl.getCdmc()!=null && !"".equals(cdgl.getCdmc())){
int count = 0; //需要循环遍历父节点次数
String[] cdmcArr = new String[cdglList.size()]; //保存匹配的菜单名称
for (CdglOperation cd: cdglList) {
if(cd.getCdmc().indexOf(cdgl.getCdmc())>-1){
cdmcArr[count] =cd.getCdmc();
count += 1;
}
}
for(int i=0;i<count;i++){
resultParentCdglList(cdglList,cdmcArr[i]);
}
}else{
cdmcList = cdglList;
}
//展示树状图列表风格数据
List<CdglOperation> resultList = new ArrayList<CdglOperation>();
for (CdglOperation cdglOperation : cdmcList) {
if (cdglOperation.getFjd()==0) {//父级菜单开始添加
resultList.add(cdglOperation);
if (ifChilds(cdmcList, cdglOperation.getTreeId())) {//存在子集
List<CdglOperation> childs = new ArrayList<CdglOperation>();
childs = getChildList(cdmcList,cdglOperation.getTreeId(),childs);
resultList.addAll(childs);
}
}
}
//相同父节点需要根据菜单排序字段排列循序
Collections.sort(resultList, new Comparator<CdglOperation>() {
@Override
public int compare(CdglOperation c1, CdglOperation c2) {
if(c1.getFjd() == c2.getFjd()){
return c1.getTreeSort() - c2.getTreeSort();
}
return 0;
}
});
long end = System.currentTimeMillis();
System.out.println("查询耗时:"+(end-start)+"毫秒");
return resultList;
}
public void resultParentCdglList(List<CdglOperation> cdglList,String cdmc){
int fjd=0;
for(CdglOperation cdgl : cdglList){
if(cdgl.getCdmc().indexOf(cdmc) >-1){
fjd= cdgl.getFjd();
cdmcList.add(cdgl);
for(CdglOperation cd : cdglList){
if(fjd==cd.getTreeId()){
cdmc = cd.getCdmc();
}
}
}
}
if(ifChilds(cdglList, fjd)){
resultParentCdglList(cdglList,cdmc);
}
}
//获取父id下的子集合
private List<CdglOperation> getChildList(List<CdglOperation> list,int pId,List<CdglOperation> reList) {
for (CdglOperation cdglOperation : list) {
if (cdglOperation.getFjd()==pId) {//查询下级菜单
reList.add(cdglOperation);
if (ifChilds(list, cdglOperation.getTreeId())) {
getChildList(list, cdglOperation.getTreeId(), reList);
}
}
}
return reList;
}
//判断是否存在子集
private static boolean ifChilds(List<CdglOperation> list,int pId) {
boolean flag = false;
for (CdglOperation cdglOperation : list) {
if (cdglOperation.getTreeId()==pId) {
flag=true;
break;
}
}
return flag;
}