|
@@ -10,8 +10,10 @@ import org.apache.ibatis.annotations.Param;
|
|
import org.apache.shiro.SecurityUtils;
|
|
import org.apache.shiro.SecurityUtils;
|
|
import org.checkerframework.checker.nullness.Opt;
|
|
import org.checkerframework.checker.nullness.Opt;
|
|
import org.jeecg.common.system.vo.LoginUser;
|
|
import org.jeecg.common.system.vo.LoginUser;
|
|
|
|
+import org.jeecg.common.util.DateUtils;
|
|
import org.jeecg.common.util.RedisUtil;
|
|
import org.jeecg.common.util.RedisUtil;
|
|
import org.jeecg.modules.Index.util.AuthMark;
|
|
import org.jeecg.modules.Index.util.AuthMark;
|
|
|
|
+import org.jeecg.modules.Index.util.CacheKey;
|
|
import org.jeecg.modules.Index.util.CommonMethod;
|
|
import org.jeecg.modules.Index.util.CommonMethod;
|
|
import org.jeecg.modules.costModelClPrice.vo.CostModelClPriceExportVO;
|
|
import org.jeecg.modules.costModelClPrice.vo.CostModelClPriceExportVO;
|
|
import org.jeecg.modules.costModelList.entity.CostModelList;
|
|
import org.jeecg.modules.costModelList.entity.CostModelList;
|
|
@@ -46,7 +48,14 @@ import java.io.ByteArrayOutputStream;
|
|
import java.io.ObjectOutputStream;
|
|
import java.io.ObjectOutputStream;
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
import java.math.RoundingMode;
|
|
import java.math.RoundingMode;
|
|
|
|
+import java.text.SimpleDateFormat;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
|
+import java.util.concurrent.CompletableFuture;
|
|
|
|
+import java.util.concurrent.ExecutionException;
|
|
|
|
+import java.util.concurrent.ExecutorService;
|
|
|
|
+import java.util.concurrent.Executors;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
+import java.util.stream.IntStream;
|
|
|
|
|
|
/**
|
|
/**
|
|
* @Description: 项目成本汇集表
|
|
* @Description: 项目成本汇集表
|
|
@@ -212,7 +221,7 @@ public class ProjectCostHuijiServiceImpl extends ServiceImpl<ProjectCostHuijiMap
|
|
public ModelAndView exportXlsProjectCost(HttpServletRequest request, ProjectCostHuiji projectCostHuiji, Class<ProjectCostHuiji> clazz, String title, String isFolding){
|
|
public ModelAndView exportXlsProjectCost(HttpServletRequest request, ProjectCostHuiji projectCostHuiji, Class<ProjectCostHuiji> clazz, String title, String isFolding){
|
|
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
|
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
|
String role = commonMethod.getRole(sysUser.getUsername());
|
|
String role = commonMethod.getRole(sysUser.getUsername());
|
|
-
|
|
|
|
|
|
+ SimpleDateFormat sformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
//查询需要导出的数据
|
|
//查询需要导出的数据
|
|
List<ProjectCostHuijiExportVO> projectCostHuijiListVOAll = new ArrayList<>();//父级加子集 最后导入excel中的数据
|
|
List<ProjectCostHuijiExportVO> projectCostHuijiListVOAll = new ArrayList<>();//父级加子集 最后导入excel中的数据
|
|
List<ProjectCostHuijiExportVO> projectCostHuijiListVOS = new ArrayList<>();//父级数据
|
|
List<ProjectCostHuijiExportVO> projectCostHuijiListVOS = new ArrayList<>();//父级数据
|
|
@@ -222,15 +231,52 @@ public class ProjectCostHuijiServiceImpl extends ServiceImpl<ProjectCostHuijiMap
|
|
if(isFolding.equals("0")){//折叠 导出汇集
|
|
if(isFolding.equals("0")){//折叠 导出汇集
|
|
projectCostHuijiListVOAll.addAll(projectCostHuijiListVOS);
|
|
projectCostHuijiListVOAll.addAll(projectCostHuijiListVOS);
|
|
}else if(isFolding.equals("1")){//展开,导出汇集+子集
|
|
}else if(isFolding.equals("1")){//展开,导出汇集+子集
|
|
|
|
+ System.out.println("开始查询数据的时间:"+ sformat.format(DateUtils.getDate()));
|
|
|
|
+
|
|
if(projectCostHuijiListVOS.size()!=0){
|
|
if(projectCostHuijiListVOS.size()!=0){
|
|
- for(ProjectCostHuijiExportVO projectCostHuijiListVO:projectCostHuijiListVOS){
|
|
|
|
- List<ProjectCostHuijiExportVO> projectCostHuijiListVOS1 = children1(projectCostHuijiListVO.getTaskno());//主任务及批产的主任务
|
|
|
|
- List<ProjectCostHuijiExportVO> projectCostHuijiListVOS2 = children2(projectCostHuijiListVO.getTaskno());//子任务及批产的子任务
|
|
|
|
- projectCostHuijiListVOAll.add(projectCostHuijiListVO);//父级数据
|
|
|
|
- projectCostHuijiListVOAll.addAll(projectCostHuijiListVOS1);//主任务及批产的主任务
|
|
|
|
- projectCostHuijiListVOAll.addAll(projectCostHuijiListVOS2);//子任务及批产的子任务
|
|
|
|
|
|
+ int batchSize = 1000;
|
|
|
|
+ int totalSize = projectCostHuijiListVOS.size();
|
|
|
|
+ int numThreads = (int) Math.ceil((double) totalSize / batchSize);
|
|
|
|
+
|
|
|
|
+ List<CompletableFuture<List<ProjectCostHuijiExportVO>>> completableFutures = new ArrayList<>();
|
|
|
|
+ for (int i = 0; i < numThreads; i++) {
|
|
|
|
+ final int batchIndex = i;
|
|
|
|
+ List<ProjectCostHuijiExportVO> finalProjectCostHuijiListVOS = projectCostHuijiListVOS;
|
|
|
|
+ int startIndex = batchIndex * batchSize;
|
|
|
|
+ int endIndex = Math.min(startIndex + batchSize, totalSize);
|
|
|
|
+ List<ProjectCostHuijiExportVO> list = finalProjectCostHuijiListVOS.subList(startIndex, endIndex);
|
|
|
|
+ CompletableFuture<List<ProjectCostHuijiExportVO>> getSonListFuture = CompletableFuture.supplyAsync(() -> {
|
|
|
|
+ List<ProjectCostHuijiExportVO> resultList = new ArrayList<>();
|
|
|
|
+ for (ProjectCostHuijiExportVO data : list) {
|
|
|
|
+ List<ProjectCostHuijiExportVO> rList = huijiMapper.costListByTaskNoSubTwoNew(data.getTaskno());
|
|
|
|
+ resultList.add(data);
|
|
|
|
+ resultList.addAll(rList);
|
|
|
|
+ }
|
|
|
|
+ return resultList;
|
|
|
|
+ });
|
|
|
|
+ completableFutures.add(getSonListFuture);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ // 等待所有 CompletableFuture 执行完成
|
|
|
|
+ CompletableFuture<Void> future = CompletableFuture.allOf(completableFutures.toArray(new CompletableFuture[0]));
|
|
|
|
+ future.join();
|
|
|
|
+
|
|
|
|
+ // 所有 CompletableFuture 执行完成后的后续操作
|
|
|
|
+ for (CompletableFuture<List<ProjectCostHuijiExportVO>> sonFuture : completableFutures) {
|
|
|
|
+ projectCostHuijiListVOAll.addAll(sonFuture.join());
|
|
|
|
+ }
|
|
|
|
+ System.out.println("查询数据结束的时间:"+ sformat.format(DateUtils.getDate()));
|
|
|
|
+ System.out.println("开始缓存数据的时间:"+ sformat.format(DateUtils.getDate()));
|
|
|
|
+
|
|
|
|
+ //for(ProjectCostHuijiExportVO projectCostHuijiListVO:projectCostHuijiListVOS){
|
|
|
|
+ // List<ProjectCostHuijiExportVO> projectCostHuijiListVOS1 = children1(projectCostHuijiListVO.getTaskno());//主任务及批产的主任务
|
|
|
|
+ // List<ProjectCostHuijiExportVO> projectCostHuijiListVOS2 = children2(projectCostHuijiListVO.getTaskno());//子任务及批产的子任务
|
|
|
|
+ // projectCostHuijiListVOAll.add(projectCostHuijiListVO);//父级数据
|
|
|
|
+ // projectCostHuijiListVOAll.addAll(projectCostHuijiListVOS1);//主任务及批产的主任务
|
|
|
|
+ // projectCostHuijiListVOAll.addAll(projectCostHuijiListVOS2);//子任务及批产的子任务
|
|
|
|
+ //}
|
|
}
|
|
}
|
|
|
|
+ System.out.println("数据缓存结束的时间:"+ sformat.format(DateUtils.getDate()));
|
|
}
|
|
}
|
|
|
|
|
|
}else if(role.equals(AuthMark.DEPT_LEADER)){//部门领导 根据部门查
|
|
}else if(role.equals(AuthMark.DEPT_LEADER)){//部门领导 根据部门查
|
|
@@ -270,13 +316,7 @@ public class ProjectCostHuijiServiceImpl extends ServiceImpl<ProjectCostHuijiMap
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
-
|
|
|
|
-// Object projectCostHuijiPageList = queryPageList(projectCostHuiji, 1, 10000, request).getResult();
|
|
|
|
-// System.out.println(projectCostHuijiPageList);
|
|
|
|
-// ProjectCostSumVo projectCostHuijiPageList1 = new ProjectCostSumVo();
|
|
|
|
-// if(projectCostHuijiPageList != null) projectCostHuijiPageList1 = (ProjectCostSumVo) projectCostHuijiPageList;
|
|
|
|
-// System.out.println(projectCostHuijiPageList1);
|
|
|
|
|
|
+ System.out.println("开始导出的时间:"+ sformat.format(DateUtils.getDate()));
|
|
|
|
|
|
List<Map<String, Object>> list = new ArrayList<>();
|
|
List<Map<String, Object>> list = new ArrayList<>();
|
|
Map<String, Object> map = new HashMap<>();
|
|
Map<String, Object> map = new HashMap<>();
|
|
@@ -285,31 +325,15 @@ public class ProjectCostHuijiServiceImpl extends ServiceImpl<ProjectCostHuijiMap
|
|
map.put(NormalExcelConstants.DATA_LIST, projectCostHuijiListVOAll);
|
|
map.put(NormalExcelConstants.DATA_LIST, projectCostHuijiListVOAll);
|
|
list.add(map);
|
|
list.add(map);
|
|
|
|
|
|
-// //汇集表
|
|
|
|
-// Map<String, Object> map = new HashMap<>();
|
|
|
|
-// map.put(NormalExcelConstants.CLASS, ProjectCostHuiji.class);
|
|
|
|
-// map.put(NormalExcelConstants.PARAMS, new ExportParams("项目成本汇集表", "导出人:" + sysUser.getRealname(), "项目成本汇集表"));
|
|
|
|
-// map.put(NormalExcelConstants.DATA_LIST, projectCostHuijiListVOS);
|
|
|
|
-// list.add(map);
|
|
|
|
-//
|
|
|
|
-// //子集表
|
|
|
|
-// Map<String, Object> map2 = new HashMap<>();
|
|
|
|
-// map2.put(NormalExcelConstants.CLASS, ProjectCost.class);
|
|
|
|
-// map2.put(NormalExcelConstants.PARAMS, new ExportParams("项目成本子集表", "导出人:" + sysUser.getRealname(), "项目成本子集表"));
|
|
|
|
-// map2.put(NormalExcelConstants.DATA_LIST, projectCostHuijiListVOS);
|
|
|
|
-// list.add(map2);
|
|
|
|
-
|
|
|
|
//3.AutoPoi 导出Excel
|
|
//3.AutoPoi 导出Excel
|
|
// System.out.println("导出excel");
|
|
// System.out.println("导出excel");
|
|
ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
|
|
ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
|
|
mv.addObject(NormalExcelConstants.FILE_NAME, title); //文件名称,但是前端会重新命名
|
|
mv.addObject(NormalExcelConstants.FILE_NAME, title); //文件名称,但是前端会重新命名
|
|
mv.addObject(NormalExcelConstants.MAP_LIST, list);
|
|
mv.addObject(NormalExcelConstants.MAP_LIST, list);
|
|
-// mv.addObject(NormalExcelConstants.CLASS, clazz); //实体类型
|
|
|
|
-// mv.addObject(NormalExcelConstants.PARAMS,new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title));//标题,sheet名称
|
|
|
|
-// mv.addObject(NormalExcelConstants.DATA_LIST, listWxf); //list数据
|
|
|
|
|
|
+
|
|
|
|
+ System.out.println("导出结束的时间:"+ sformat.format(DateUtils.getDate()));
|
|
|
|
|
|
return mv;
|
|
return mv;
|
|
|
|
|
|
}
|
|
}
|
|
-
|
|
|
|
}
|
|
}
|