diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java index d816e618..70231396 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java +++ b/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 InitTreeMenus(String mname,String adminorg) { // 获取所有顶级类别 List materialTypeNoParent = materialTypeMapper.findMaterialTypeNoParent(); + // 开启对应数量的线程 + ExecutorService exs = Executors.newFixedThreadPool(materialTypeNoParent.size()); + // 结果集 List list = new ArrayList<>(); + List> futureList = new ArrayList>(); + // 1.定义CompletionService + CompletionService completionService = new ExecutorCompletionService(exs); + for (int i = 0; i < materialTypeNoParent.size(); i++) { - // 获取当前顶级类别 - MaterialType mt = materialTypeNoParent.get(i); - List childForMaterialTypeByParent = findChildForMaterialTypeByParent(mt.getOldId(),mname,adminorg); - Map stringObjectMap = new HashMap<>(); - if(childForMaterialTypeByParent != null) { - stringObjectMap = InitTreeMenus(mt, childForMaterialTypeByParent); - }else{ - List materialByType = AddMaterialByType(mt,mname,adminorg); - stringObjectMap = InitTreeMenus(mt, materialByType); + MaterialType materialType = materialTypeNoParent.get(i); + Future future = completionService.submit(new Task(materialType,mname,adminorg)); + futureList.add(future); + } + + // 3.获取结果 + for(int i=0;i InitTreeMenus(String mname){ List materialTypeNoParent = materialTypeMapper.findMaterialTypeNoParent(); - // 创造一个线程池 - TaskCenterUtil taskCenterUtil = TaskCenterUtil.getTaskCenterUtil(); + // 开启对应数量的线程 + ExecutorService exs = Executors.newFixedThreadPool(materialTypeNoParent.size()); + // 结果集 List list = new ArrayList<>(); + List> futureList = new ArrayList>(); + + // 1.定义CompletionService + CompletionService completionService = new ExecutorCompletionService(exs); + for (int i = 0; i < materialTypeNoParent.size(); i++) { - Map result = new HashMap<>(); - MaterialType mt = materialTypeNoParent.get(i); - Future objectFuture = taskCenterUtil.submitTask(() -> { - List childForMaterialTypeByParent = findChildForMaterialTypeByParent(mt.getOldId(), mname, ""); - Map stringObjectMap = new HashMap<>(); - if (childForMaterialTypeByParent != null) { - stringObjectMap = InitTreeMenus(mt, childForMaterialTypeByParent); - } else { - List materialByType = AddMaterialByType(mt, mname, ""); - stringObjectMap = InitTreeMenus(mt, materialByType); - } - return stringObjectMap; - }); + MaterialType materialType = materialTypeNoParent.get(i); + Future future = completionService.submit(new Task(materialType,mname,"")); + futureList.add(future); + } + // 3.获取结果 + for(int i=0;i) 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{ + + 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 childForMaterialTypeByParent = findChildForMaterialTypeByParent(mt.getOldId(), mname, adminorg); + Map stringObjectMap = new HashMap<>(); + if (childForMaterialTypeByParent != null) { + stringObjectMap = InitTreeMenus(mt, childForMaterialTypeByParent); + } else { + List materialByType = AddMaterialByType(mt, mname, adminorg); + stringObjectMap = InitTreeMenus(mt, materialByType); + } + return stringObjectMap; + } + } + // 构造树形组件数据模板 public Map InitTreeMenus(MaterialType mt,List children){ if(mt != null) {