Browse Source

优化树形选择框的构造

lwx_dev
erdanergou 3 years ago
parent
commit
d547b90e65
  1. 97
      src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java

97
src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java

@ -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) {

Loading…
Cancel
Save