/**
* 根据数据库构建平台树
*
* @param modelList
* @param treeNodeMap
* @param root
*/
private void buildRoot(List<EsCompanyForTreeQueryItem> modelList, Map<Long, TreeNode> treeNodeMap, TreeNode root,boolean isAdd) {
EsCompanyForTreeQueryItem companyFictitious =null;
if(isAdd){
companyFictitious =new EsCompanyForTreeQueryItem();
companyFictitious.setEscoId(999L);
companyFictitious.setEscoCompanyNameCn("离职禁用无组织");
modelList.add(companyFictitious);
}
// 根据数据库数据构建树结点
UserDetails user=SessionContext.getUser();
TreeNode node;
EsCompanyForTreeQueryItem element;
ExecutorService pool=Executors.newFixedThreadPool(4);
/**
* 容量为2的阻塞队列
*/
//BlockingQueue<Future> queue = new LinkedBlockingDeque<Future>(2);
//实例化CompletionService
CompletionService completionService = new ExecutorCompletionService(
pool);
int length=modelList.size();
int index;
List<EsCompanyForTreeQueryItem> tempList;
for(int i=0;i<length;i+=3000){
index=i+3000;
if (index > length) {
tempList = modelList.subList(i, length);
} else {
tempList = modelList.subList(i, index);
}
Thread thread=new Thread(new CycleTask(tempList,companyFictitious));
completionService.submit(thread,new Object());
}
pool.shutdown();
while(!pool.isTerminated()){
Object lock = new Object();
synchronized (lock) {
try {
lock.wait(1000);
} catch (InterruptedException e) {
}
}
}
treeNodeMap=alltreeNodeMap;
/*for (Iterator iter = modelList.iterator(); iter.hasNext();) {
element = (EsCompanyQueryItem) iter.next();
node = new TreeNode();
node.setId(element.getEscoId().toString());
//node.setLabel(element.getEscoCompanyNameCn());
if ("en_US".equals(user.getLanguage())){
node.setLabel(element.getEscoCompanyNameEn());
}else {
node.setLabel(element.getEscoCompanyNameCn());
}
if (null!=companyFictitious && element.getEscoParentEscoId() == -1) {
companyFictitious.setEscoParentEscoId(element.getEscoId());
}
node.setParentId(element.getEscoParentEscoId().toString());
node.setData(element);
treeNodeMap.put(element.getEscoId(), node);
}*/
// 根据上级平台ID构建上下级关系
for (Iterator<EsCompanyForTreeQueryItem> iter = modelList.iterator(); iter.hasNext();) {
element = iter.next();
// 如果上级平台ID为-1则为总公司根节点,否则为分公司
if (element.getEscoParentEscoId() == -1) {
root.addChild(treeNodeMap.get(element.getEscoId()));
} else {
Long parentId = element.getEscoParentEscoId();
node = treeNodeMap.get(parentId);
if(node != null){
node.addChild(treeNodeMap.get(element.getEscoId()));
}
}
}
}
class CycleTask implements Runnable{
public CycleTask(List<EsCompanyForTreeQueryItem> list,EsCompanyForTreeQueryItem item){
tempList=list;
companyFictitious=item;
}
List<EsCompanyForTreeQueryItem> tempList;
EsCompanyForTreeQueryItem element;
TreeNode node;
EsCompanyForTreeQueryItem companyFictitious =null;
Map<Long, TreeNode> treeNodeMap=new HashMap<Long,TreeNode>();
@Override
public void run() {
for (Iterator<EsCompanyForTreeQueryItem> iter = tempList.iterator(); iter.hasNext();) {
element = iter.next();
node = new TreeNode();
node.setId(element.getEscoId().toString());
node.setLabel(element.getEscoCompanyNameCn());
if (null!=companyFictitious && element.getEscoParentEscoId() == -1) {
companyFictitious.setEscoParentEscoId(element.getEscoId());
}
node.setParentId(element.getEscoParentEscoId().toString());
node.setData(element);
treeNodeMap.put(element.getEscoId(), node);
}
alltreeNodeMap.putAll(treeNodeMap);
}
}