|
|
|
@ -26,8 +26,7 @@ import java.util.ArrayList; |
|
|
|
import java.util.HashMap; |
|
|
|
import java.util.List; |
|
|
|
import java.util.Map; |
|
|
|
import java.util.concurrent.ExecutionException; |
|
|
|
import java.util.concurrent.Future; |
|
|
|
import java.util.concurrent.*; |
|
|
|
|
|
|
|
/** |
|
|
|
* @author Dreamchaser |
|
|
|
@ -567,19 +566,31 @@ public class MaterialServiceImpl implements MaterialService { |
|
|
|
public List<Object> InitTreeMenus(String mname,String adminorg) { |
|
|
|
// 获取所有顶级类别
|
|
|
|
List<MaterialType> materialTypeNoParent = materialTypeMapper.findMaterialTypeNoParent(); |
|
|
|
// 开启对应数量的线程
|
|
|
|
ExecutorService exs = Executors.newFixedThreadPool(materialTypeNoParent.size()); |
|
|
|
// 结果集
|
|
|
|
List<Object> list = new ArrayList<>(); |
|
|
|
List<Future<Object>> futureList = new ArrayList<Future<Object>>(); |
|
|
|
// 1.定义CompletionService
|
|
|
|
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs); |
|
|
|
|
|
|
|
for (int i = 0; i < materialTypeNoParent.size(); i++) { |
|
|
|
// 获取当前顶级类别
|
|
|
|
MaterialType mt = materialTypeNoParent.get(i); |
|
|
|
List<Object> childForMaterialTypeByParent = findChildForMaterialTypeByParent(mt.getOldId(),mname,adminorg); |
|
|
|
Map<String, Object> stringObjectMap = new HashMap<>(); |
|
|
|
if(childForMaterialTypeByParent != null) { |
|
|
|
stringObjectMap = InitTreeMenus(mt, childForMaterialTypeByParent); |
|
|
|
}else{ |
|
|
|
List<Object> materialByType = AddMaterialByType(mt,mname,adminorg); |
|
|
|
stringObjectMap = InitTreeMenus(mt, materialByType); |
|
|
|
MaterialType materialType = materialTypeNoParent.get(i); |
|
|
|
Future<Object> future = completionService.submit(new Task(materialType,mname,adminorg)); |
|
|
|
futureList.add(future); |
|
|
|
} |
|
|
|
|
|
|
|
// 3.获取结果
|
|
|
|
for(int i=0;i<materialTypeNoParent.size();i++){ |
|
|
|
Object result = null; |
|
|
|
try { |
|
|
|
result = completionService.take().get(); |
|
|
|
} catch (InterruptedException e) { |
|
|
|
e.printStackTrace(); |
|
|
|
} catch (ExecutionException e) { |
|
|
|
e.printStackTrace(); |
|
|
|
} |
|
|
|
list.add(stringObjectMap); |
|
|
|
list.add(result); |
|
|
|
} |
|
|
|
return list; |
|
|
|
} |
|
|
|
@ -590,35 +601,61 @@ public class MaterialServiceImpl implements MaterialService { |
|
|
|
*/ |
|
|
|
public List<Object> InitTreeMenus(String mname){ |
|
|
|
List<MaterialType> materialTypeNoParent = materialTypeMapper.findMaterialTypeNoParent(); |
|
|
|
// 创造一个线程池
|
|
|
|
TaskCenterUtil taskCenterUtil = TaskCenterUtil.getTaskCenterUtil(); |
|
|
|
// 开启对应数量的线程
|
|
|
|
ExecutorService exs = Executors.newFixedThreadPool(materialTypeNoParent.size()); |
|
|
|
// 结果集
|
|
|
|
List<Object> list = new ArrayList<>(); |
|
|
|
List<Future<Object>> futureList = new ArrayList<Future<Object>>(); |
|
|
|
|
|
|
|
// 1.定义CompletionService
|
|
|
|
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs); |
|
|
|
|
|
|
|
for (int i = 0; i < materialTypeNoParent.size(); i++) { |
|
|
|
Map<String, Object> result = new HashMap<>(); |
|
|
|
MaterialType mt = materialTypeNoParent.get(i); |
|
|
|
Future<Object> objectFuture = taskCenterUtil.submitTask(() -> { |
|
|
|
List<Object> childForMaterialTypeByParent = findChildForMaterialTypeByParent(mt.getOldId(), mname, ""); |
|
|
|
Map<String, Object> stringObjectMap = new HashMap<>(); |
|
|
|
if (childForMaterialTypeByParent != null) { |
|
|
|
stringObjectMap = InitTreeMenus(mt, childForMaterialTypeByParent); |
|
|
|
} else { |
|
|
|
List<Object> materialByType = AddMaterialByType(mt, mname, ""); |
|
|
|
stringObjectMap = InitTreeMenus(mt, materialByType); |
|
|
|
} |
|
|
|
return stringObjectMap; |
|
|
|
}); |
|
|
|
MaterialType materialType = materialTypeNoParent.get(i); |
|
|
|
Future<Object> future = completionService.submit(new Task(materialType,mname,"")); |
|
|
|
futureList.add(future); |
|
|
|
} |
|
|
|
// 3.获取结果
|
|
|
|
for(int i=0;i<materialTypeNoParent.size();i++){ |
|
|
|
Object result = null; |
|
|
|
try { |
|
|
|
result = (Map<String, Object>) objectFuture.get(); |
|
|
|
} catch (InterruptedException ignored) { |
|
|
|
|
|
|
|
result = completionService.take().get(); |
|
|
|
} catch (InterruptedException e) { |
|
|
|
e.printStackTrace(); |
|
|
|
} catch (ExecutionException e) { |
|
|
|
e.printStackTrace(); |
|
|
|
} |
|
|
|
list.add(result); |
|
|
|
} |
|
|
|
|
|
|
|
return list; |
|
|
|
} |
|
|
|
|
|
|
|
class Task implements Callable<Object>{ |
|
|
|
|
|
|
|
MaterialType mt; |
|
|
|
String mname; |
|
|
|
String adminorg; |
|
|
|
|
|
|
|
public Task(MaterialType mt,String mname,String adminorg){ |
|
|
|
this.mt = mt; |
|
|
|
this.mname = mname; |
|
|
|
this.adminorg = adminorg; |
|
|
|
} |
|
|
|
@Override |
|
|
|
public Object call() throws Exception { |
|
|
|
List<Object> childForMaterialTypeByParent = findChildForMaterialTypeByParent(mt.getOldId(), mname, adminorg); |
|
|
|
Map<String, Object> stringObjectMap = new HashMap<>(); |
|
|
|
if (childForMaterialTypeByParent != null) { |
|
|
|
stringObjectMap = InitTreeMenus(mt, childForMaterialTypeByParent); |
|
|
|
} else { |
|
|
|
List<Object> materialByType = AddMaterialByType(mt, mname, adminorg); |
|
|
|
stringObjectMap = InitTreeMenus(mt, materialByType); |
|
|
|
} |
|
|
|
return stringObjectMap; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 构造树形组件数据模板
|
|
|
|
public Map<String,Object> InitTreeMenus(MaterialType mt,List<Object> children){ |
|
|
|
if(mt != null) { |
|
|
|
|