丁治程 1 год назад
Родитель
Сommit
c02942d39d

+ 3 - 0
module_kzks/src/main/java/org/jeecg/modules/projectCostHuiji/mapper/ProjectCostHuijiMapper.java

@@ -75,4 +75,7 @@ public interface ProjectCostHuijiMapper extends BaseMapper<ProjectCostHuiji> {
     /**根据任务号查询项目成本的子任务及组批后的子任务*/
     List<ProjectCostHuijiExportVO> costListByTaskNoSubTwo(String taskno);
 
+
+    List<ProjectCostHuijiExportVO> costListByTaskNoSubTwoNew(String taskno);
+
 }

+ 19 - 0
module_kzks/src/main/java/org/jeecg/modules/projectCostHuiji/mapper/xml/ProjectCostHuijiMapper.xml

@@ -227,4 +227,23 @@
     </select>
 
 
+    <select id="costListByTaskNoSubTwoNew" resultType="org.jeecg.modules.projectCostHuiji.vo.ProjectCostHuijiExportVO">
+        SELECT c.id, 2 as ji, c.taskno, c.taskname, c.xhname, c.jhwcsj, c.yzjdname, CONCAT(ROUND(c.processPercent, 0), '%') as processpercent,
+               CONCAT(ROUND(c.cost_percent * 100.0, 0), '%') as costPercent, ROUND(c.TaskMoney /10000, 2) as taskmoney,
+               ROUND(c.contractfpe /10000, 2) as contractfpe, ROUND(c.EstimationCoat, 2) as estimationcoat, ROUND(c.zcb /10000, 2) as zcb,
+               ROUND(c.lre /10000, 2) as lre, CONCAT(ROUND(lrl * 100.0, 1), '%') as lrl, c.yzsl, ROUND(c.one_profit /10000, 2) as oneProfit,
+               ROUND(c.one_income /10000, 2) as oneIncome, ROUND(c.one_cost /10000, 2) as oneCost, ROUND(c.clys, 2) as clys,
+               ROUND(c.clf /10000, 2) as clf, ROUND(c.zyys, 2) as zyys, ROUND(c.zyf /10000, 2) as zyf, ROUND(c.swys, 2) as swys,
+               ROUND(c.swf /10000, 2) as swf, ROUND(c.wxys, 2) as wxys, ROUND(c.wxf /10000, 2) as wxf, ROUND(c.jjys, 2) as jjys,
+               ROUND(c.rldlf /10000, 2) as rldlf, ROUND(c.gdzczj /10000, 2) as gdzczj, ROUND(c.gzjlwf /10000, 2) as gzjlwf,
+               ROUND(c.glf /10000, 2) as glf, ROUND(c.sxf /10000, 2) as sxf, ROUND(IFNULL(c.zjcb,m.value) / 10000, 2) as zjcb,
+               c.lbsy, c.workhour, c.zrbm, c.jycsid, c.jycs, c.hxzxid, c.hxzxname, c.tasktype, c.AuditPrice as auditprice, c.iflag,
+               c.Brief as brief, c.reftaskno, c.pcCode as pccode, c.bcCode as bccode, c.blCode as blcode, c.business_man_name as businessManName,
+               c.ywfzrname, c.xhzzrname, c.sjgs, c.scgs
+        FROM kzks_project_cost c
+                 left join mes_info_installationcost m on m.taskno = c.taskno
+        where c.taskno = #{taskno} or c.reftaskno = #{taskno} order by c.taskno ,c.status
+
+    </select>
+
 </mapper>

+ 56 - 32
module_kzks/src/main/java/org/jeecg/modules/projectCostHuiji/service/impl/ProjectCostHuijiServiceImpl.java

@@ -10,8 +10,10 @@ import org.apache.ibatis.annotations.Param;
 import org.apache.shiro.SecurityUtils;
 import org.checkerframework.checker.nullness.Opt;
 import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.DateUtils;
 import org.jeecg.common.util.RedisUtil;
 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.costModelClPrice.vo.CostModelClPriceExportVO;
 import org.jeecg.modules.costModelList.entity.CostModelList;
@@ -46,7 +48,14 @@ import java.io.ByteArrayOutputStream;
 import java.io.ObjectOutputStream;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
 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: 项目成本汇集表
@@ -212,7 +221,7 @@ public class ProjectCostHuijiServiceImpl extends ServiceImpl<ProjectCostHuijiMap
     public ModelAndView exportXlsProjectCost(HttpServletRequest request, ProjectCostHuiji projectCostHuiji, Class<ProjectCostHuiji> clazz, String title, String isFolding){
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         String role = commonMethod.getRole(sysUser.getUsername());
-
+        SimpleDateFormat sformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         //查询需要导出的数据
         List<ProjectCostHuijiExportVO> projectCostHuijiListVOAll = new ArrayList<>();//父级加子集 最后导入excel中的数据
         List<ProjectCostHuijiExportVO> projectCostHuijiListVOS = new ArrayList<>();//父级数据
@@ -222,15 +231,52 @@ public class ProjectCostHuijiServiceImpl extends ServiceImpl<ProjectCostHuijiMap
             if(isFolding.equals("0")){//折叠 导出汇集
                 projectCostHuijiListVOAll.addAll(projectCostHuijiListVOS);
             }else if(isFolding.equals("1")){//展开,导出汇集+子集
+                System.out.println("开始查询数据的时间:"+ sformat.format(DateUtils.getDate()));
+
                 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)){//部门领导 根据部门查
@@ -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<>();
         Map<String, Object> map = new HashMap<>();
@@ -285,31 +325,15 @@ public class ProjectCostHuijiServiceImpl extends ServiceImpl<ProjectCostHuijiMap
         map.put(NormalExcelConstants.DATA_LIST, projectCostHuijiListVOAll);
         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
 //        System.out.println("导出excel");
         ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
         mv.addObject(NormalExcelConstants.FILE_NAME, title);  //文件名称,但是前端会重新命名
         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;
 
     }
-
 }