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

Loading…
Cancel
Save