丁治程 пре 11 месеци
родитељ
комит
59680d72c2

+ 2 - 2
jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml

@@ -155,8 +155,8 @@ spring:
   redis:
     database: 9
     host: 127.0.0.1
-    port: 6379
-    password: ''
+    port: 6380
+    password: '123qx'
 #mybatis plus 设置
 mybatis-plus:
   mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml

+ 149 - 179
module_kzks/src/main/java/org/jeecg/modules/Index/service/impl/IndexKpiServiceImpl.java

@@ -141,6 +141,11 @@ public class IndexKpiServiceImpl implements IndexKpiService {
         //所长权限,查看部门指标排行
         if (role.equals(AuthMark.BOSS)) {
             System.out.println("当前账户权限:所长,可以查看部门指标排行");
+
+
+            IndexKpiDataDepart indexKpiDataDepart1 = (IndexKpiDataDepart) redisUtil.get(CacheKey.INDEX_ZRBM_NEW + ":" + indexKpiParamDto.getTime() + ":" + indexKpiParamDto.getBeginDate());
+            if (indexKpiDataDepart1 != null) return indexKpiDataDepart1;
+
             //目前是算某个月的指标,不涉及范围
             String timeType = indexKpiParamDto.getTime();//年/月
             String dateString = indexKpiParamDto.getBeginDate();//日期
@@ -157,7 +162,11 @@ public class IndexKpiServiceImpl implements IndexKpiService {
             try{
                 if(timeType.equals("year")){
                     isCurrentDate = dateString.equals(String.valueOf(currentDateYear));
-                    dateYm = String.format("%s-%d", Integer.parseInt(dateString), 12);
+                    if(currentYm.equals(dateString)){
+                        dateYm = getCurronMonthString(currentYm);
+                    }else {
+                        dateYm = String.format("%s-%d", Integer.parseInt(dateString), 12);
+                    }
                     dateLastYm = String.format("%d-%d", Integer.parseInt(dateString)-1, 12);
                 }else if(timeType.equals("month")){
                     isCurrentDate = dateString.equals(currentYm);
@@ -213,125 +222,126 @@ public class IndexKpiServiceImpl implements IndexKpiService {
             // 如果前端查询 2023-01 到 2023-10 之间任意一个月份的数据
             // 那么 责任部门 的合同额 = 实际完成时间等于当前月份的100%的合同额之和 ; 已收款 = 实际完成时间等于当前月份的100%的已收款之和
             //     下达部门 的合同额 = 签署日期是当前年份的合同额之和 ; 已收款 = 到款日期是当前年份的已收款之和
-            if (timeType.equals("year")){
-                if (clYear.contains(indexKpiParamDto.getBeginDate())){
-                    // 责任部门 查询 1到10月份的总合同额
-                    CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedZrbmClMapFuture =  CompletableFuture.supplyAsync(() -> {
-                        Map<String, IndexKpiCompletByDate> htereceivedZrbmClMap = new TreeMap<>();//用来保存部门该月合计的合同额、已收款以及责任部门
-                        if (zrbmList.isEmpty()) return htereceivedZrbmClMap;
-                        List<IndexKpiCompletByDate> zrbmHteCl = projectCostService.getZrbmHteCl(zrbmList);
-                        for(IndexKpiCompletByDate htereceivedZrbmCl:zrbmHteCl){
-                            htereceivedZrbmClMap.put(htereceivedZrbmCl.getDepart(), htereceivedZrbmCl);
-                        }
-                        return htereceivedZrbmClMap;
-                    });
-                    // 责任部门 查询 10月份之后的总合同额  当前查询项目和成本表中的所有的 - 十月份的
-                    // 责任部门 当期的合同额
-                    CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedZrbmMapFuture = CompletableFuture.supplyAsync(() -> {
-                        TreeMap<String, IndexKpiCompletByDate> htereceivedZrbmMap = new TreeMap<>();
-                        if (zrbmList.isEmpty()) return htereceivedZrbmMap;
-                        List<IndexKpiCompletByDate> hteReceivedZrbmCost = indexKpiMapper.getHteReceivedZrbmCost(zrbmList);
-                        for (IndexKpiCompletByDate htereceivedZrbm:hteReceivedZrbmCost) {
-                            htereceivedZrbmMap.put(htereceivedZrbm.getDepart(),htereceivedZrbm);
-                        }
-                        return htereceivedZrbmMap;
-                    });
-                    //  责任部门 10月份的合同额
-                    CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedZrbmLastMapFuture = CompletableFuture.supplyAsync(() -> {
-                        Map<String, IndexKpiCompletByDate> htereceivedZrbmLastMap = new TreeMap<>();//用来保存部门上月合计的合同额、已收款以及责任部门
-                        if (zrbmList.isEmpty()) return htereceivedZrbmLastMap;
-                        List<IndexKpiCompletByDate> htereceivedZrbmLastList = indexKpiMapper.getHteReceivedZrbmYm("2023-10", zrbmList);
-                        for(IndexKpiCompletByDate htereceivedZrbmLast:htereceivedZrbmLastList){
-                            htereceivedZrbmLastMap.put(htereceivedZrbmLast.getDepart(), htereceivedZrbmLast);
-                        }
-                        return htereceivedZrbmLastMap;
-                    });
-
-                    // 求下达部门的合同额
-                    CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedXdbmHteMapFuture = CompletableFuture.supplyAsync(() -> {
-                        Map<String, IndexKpiCompletByDate> htereceivedXdbmHteMap = new TreeMap<>();//用来保存部门上月合计的合同额、已收款以及责任部门
-                        if (xdbmList.isEmpty()) return htereceivedXdbmHteMap;
-                        List<IndexKpiCompletByDate> xdbmHte = contractInfoExchangeNewMapper.getXdbmHte(indexKpiParamDto.getBeginDate(), xdbmList);
-                        for (IndexKpiCompletByDate d:xdbmHte) {
-                            htereceivedXdbmHteMap.put(d.getDepart(),d);
-                        }
-                        return htereceivedXdbmHteMap;
-                    });
-
-                    // 求下达部门的 已收款
-                    CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedXdbmYskMapFuture = CompletableFuture.supplyAsync(() -> {
-                        Map<String, IndexKpiCompletByDate> htereceivedXdbmYskMap = new TreeMap<>();//用来保存部门上月合计的合同额、已收款以及责任部门
-                        if (xdbmList.isEmpty()) return htereceivedXdbmYskMap;
-                        List<IndexKpiCompletByDate> xdbmHte = contractInfoExchangeNewMapper.getXdbmYsk(indexKpiParamDto.getBeginDate(), xdbmList);
-                        for (IndexKpiCompletByDate d:xdbmHte) {
-                            htereceivedXdbmYskMap.put(d.getDepart(),d);
-                        }
-                        return htereceivedXdbmYskMap;
-                    });
-
-
-                    CompletableFuture<Void> future = CompletableFuture.allOf(getHtereceivedZrbmClMapFuture, getHtereceivedZrbmMapFuture, getHtereceivedZrbmLastMapFuture,getHtereceivedXdbmHteMapFuture,getHtereceivedXdbmYskMapFuture);
-                    future.join();
-                    Map<String, IndexKpiCompletByDate> htereceivedZrbmClMap = getHtereceivedZrbmClMapFuture.join();
-                    Map<String, IndexKpiCompletByDate> htereceivedZrbmMap = getHtereceivedZrbmMapFuture.join();
-                    Map<String, IndexKpiCompletByDate> htereceivedZrbmLastMap = getHtereceivedZrbmLastMapFuture.join();
-                    Map<String, IndexKpiCompletByDate> htereceivedXdbmHteMap = getHtereceivedXdbmHteMapFuture.join();
-                    Map<String, IndexKpiCompletByDate> htereceivedXdbmYskMap = getHtereceivedXdbmYskMapFuture.join();
-
-                    // 责任部门排行
-                    CompletableFuture<Void> setKpiDataZrbmList = CompletableFuture.runAsync(() -> {
-                        for(IndexKpiCompletByDate kpiDataZrbm:kpiDataZrbmList){
-                            // 1到10月份的合同额
-                            IndexKpiCompletByDate htereceivedZrbmCl = htereceivedZrbmClMap.getOrDefault(kpiDataZrbm.getDepart(), kpiDataZrbm);
-                            // 当前日期之前的所有的合同额
-                            IndexKpiCompletByDate htereceivedZrbm = htereceivedZrbmMap.getOrDefault(kpiDataZrbm.getDepart(), kpiDataZrbm);
-                            // 10月份之前的所有的合同额
-                            IndexKpiCompletByDate htereceivedZrbmLast = htereceivedZrbmLastMap.getOrDefault(kpiDataZrbm.getDepart(), kpiDataZrbm);
-                            // 显示的当年的合同额 = 1到10月份的合同额 + (当前日期之前的所有的合同额 - 10月份之前的所有的合同额)
-                            kpiDataZrbm.setContractAmount(htereceivedZrbmCl.getContractAmount().add(htereceivedZrbm.getContractAmount().subtract(htereceivedZrbmLast.getContractAmount())));
-                            // 显示的当年的已收款 = 1到10月份的已收款 + (当前日期之前的所有的已收款 - 10月份之前的所有的已收款)
-                            kpiDataZrbm.setReceived(htereceivedZrbmCl.getReceived().add(htereceivedZrbm.getReceived().subtract(htereceivedZrbmLast.getReceived())));
-                            // 计算 当年的完成度 = 当年的合同额 / 当年的指标
-                            if(kpiDataZrbm.getDepartKpi() != null){
-                                if(kpiDataZrbm.getDepartKpi().equals(BigDecimal.valueOf(0))){
-                                    kpiDataZrbm.setKpiCompletRate(BigDecimal.valueOf(1));
-                                }else{
-                                    kpiDataZrbm.setKpiCompletRate(kpiDataZrbm.getContractAmount().divide(kpiDataZrbm.getDepartKpi(), 2, RoundingMode.HALF_UP));
-                                }
-                            }
-                        }
-                        //责任部门 根据指标进行排序
-                        kpiDataZrbmList.sort(Comparator.comparing(IndexKpiCompletByDate::getKpiCompletRate, Comparator.nullsFirst(BigDecimal::compareTo)).reversed());
-                    });
-
-                    // 下达部门排行
-                    CompletableFuture<Void> setKpiDataXdbmList = CompletableFuture.runAsync(() -> {
-                        for (IndexKpiCompletByDate kpiDataXdbm:kpiDataJycsList) {
-                            IndexKpiCompletByDate htereceivedXdbmHte = htereceivedXdbmHteMap.getOrDefault(kpiDataXdbm.getDepart(), kpiDataXdbm);
-                            IndexKpiCompletByDate htereceivedXdbmYsk = htereceivedXdbmYskMap.getOrDefault(kpiDataXdbm.getDepart(), kpiDataXdbm);
-                            kpiDataXdbm.setContractAmount(htereceivedXdbmHte.getContractAmount()); // 合同额
-                            kpiDataXdbm.setReceived(htereceivedXdbmYsk.getReceived()); // 已收款
-
-                            if(kpiDataXdbm.getDepartKpi() != null){
-                                if(kpiDataXdbm.getDepartKpi().equals(BigDecimal.valueOf(0))){
-                                    kpiDataXdbm.setKpiCompletRate(BigDecimal.valueOf(1));
-                                }else{
-                                    kpiDataXdbm.setKpiCompletRate(kpiDataXdbm.getReceived().divide(kpiDataXdbm.getDepartKpi(), 2, RoundingMode.HALF_UP));
-                                }
-                            }
-                        }
-                        //下达部门 根据指标进行排序
-                        kpiDataJycsList.sort(Comparator.comparing(IndexKpiCompletByDate::getKpiCompletRate, Comparator.nullsFirst(BigDecimal::compareTo)).reversed());
-                    });
-
-                    CompletableFuture<Void> future1 = CompletableFuture.allOf(setKpiDataZrbmList,setKpiDataXdbmList);
-                    future1.join();
-
-                    indexKpiDataDepart.setZrbmCharts(kpiDataZrbmList);
-                    indexKpiDataDepart.setJycsCharts(kpiDataJycsList);
-                    return indexKpiDataDepart;
-                }
-            }else if (timeType.equals("month")){
+//            if (timeType.equals("year")){
+//                if (clYear.contains(indexKpiParamDto.getBeginDate())){
+//                    // 责任部门 查询 1到10月份的总合同额
+//                    CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedZrbmClMapFuture =  CompletableFuture.supplyAsync(() -> {
+//                        Map<String, IndexKpiCompletByDate> htereceivedZrbmClMap = new TreeMap<>();//用来保存部门该月合计的合同额、已收款以及责任部门
+//                        if (zrbmList.isEmpty()) return htereceivedZrbmClMap;
+//                        List<IndexKpiCompletByDate> zrbmHteCl = projectCostService.getZrbmHteCl(zrbmList);
+//                        for(IndexKpiCompletByDate htereceivedZrbmCl:zrbmHteCl){
+//                            htereceivedZrbmClMap.put(htereceivedZrbmCl.getDepart(), htereceivedZrbmCl);
+//                        }
+//                        return htereceivedZrbmClMap;
+//                    });
+//                    // 责任部门 查询 10月份之后的总合同额  当前查询项目和成本表中的所有的 - 十月份的
+//                    // 责任部门 当期的合同额
+//                    CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedZrbmMapFuture = CompletableFuture.supplyAsync(() -> {
+//                        TreeMap<String, IndexKpiCompletByDate> htereceivedZrbmMap = new TreeMap<>();
+//                        if (zrbmList.isEmpty()) return htereceivedZrbmMap;
+//                        List<IndexKpiCompletByDate> hteReceivedZrbmCost = indexKpiMapper.getHteReceivedZrbmCost(zrbmList);
+//                        for (IndexKpiCompletByDate htereceivedZrbm:hteReceivedZrbmCost) {
+//                            htereceivedZrbmMap.put(htereceivedZrbm.getDepart(),htereceivedZrbm);
+//                        }
+//                        return htereceivedZrbmMap;
+//                    });
+//                    //  责任部门 10月份的合同额
+//                    CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedZrbmLastMapFuture = CompletableFuture.supplyAsync(() -> {
+//                        Map<String, IndexKpiCompletByDate> htereceivedZrbmLastMap = new TreeMap<>();//用来保存部门上月合计的合同额、已收款以及责任部门
+//                        if (zrbmList.isEmpty()) return htereceivedZrbmLastMap;
+//                        List<IndexKpiCompletByDate> htereceivedZrbmLastList = indexKpiMapper.getHteReceivedZrbmYm("2023-10", zrbmList);
+//                        for(IndexKpiCompletByDate htereceivedZrbmLast:htereceivedZrbmLastList){
+//                            htereceivedZrbmLastMap.put(htereceivedZrbmLast.getDepart(), htereceivedZrbmLast);
+//                        }
+//                        return htereceivedZrbmLastMap;
+//                    });
+//
+//                    // 求下达部门的合同额
+//                    CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedXdbmHteMapFuture = CompletableFuture.supplyAsync(() -> {
+//                        Map<String, IndexKpiCompletByDate> htereceivedXdbmHteMap = new TreeMap<>();//用来保存部门上月合计的合同额、已收款以及责任部门
+//                        if (xdbmList.isEmpty()) return htereceivedXdbmHteMap;
+//                        List<IndexKpiCompletByDate> xdbmHte = contractInfoExchangeNewMapper.getXdbmHte(indexKpiParamDto.getBeginDate(), xdbmList);
+//                        for (IndexKpiCompletByDate d:xdbmHte) {
+//                            htereceivedXdbmHteMap.put(d.getDepart(),d);
+//                        }
+//                        return htereceivedXdbmHteMap;
+//                    });
+//
+//                    // 求下达部门的 已收款
+//                    CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedXdbmYskMapFuture = CompletableFuture.supplyAsync(() -> {
+//                        Map<String, IndexKpiCompletByDate> htereceivedXdbmYskMap = new TreeMap<>();//用来保存部门上月合计的合同额、已收款以及责任部门
+//                        if (xdbmList.isEmpty()) return htereceivedXdbmYskMap;
+//                        List<IndexKpiCompletByDate> xdbmHte = contractInfoExchangeNewMapper.getXdbmYsk(indexKpiParamDto.getBeginDate(), xdbmList);
+//                        for (IndexKpiCompletByDate d:xdbmHte) {
+//                            htereceivedXdbmYskMap.put(d.getDepart(),d);
+//                        }
+//                        return htereceivedXdbmYskMap;
+//                    });
+//
+//
+//                    CompletableFuture<Void> future = CompletableFuture.allOf(getHtereceivedZrbmClMapFuture, getHtereceivedZrbmMapFuture, getHtereceivedZrbmLastMapFuture,getHtereceivedXdbmHteMapFuture,getHtereceivedXdbmYskMapFuture);
+//                    future.join();
+//                    Map<String, IndexKpiCompletByDate> htereceivedZrbmClMap = getHtereceivedZrbmClMapFuture.join();
+//                    Map<String, IndexKpiCompletByDate> htereceivedZrbmMap = getHtereceivedZrbmMapFuture.join();
+//                    Map<String, IndexKpiCompletByDate> htereceivedZrbmLastMap = getHtereceivedZrbmLastMapFuture.join();
+//                    Map<String, IndexKpiCompletByDate> htereceivedXdbmHteMap = getHtereceivedXdbmHteMapFuture.join();
+//                    Map<String, IndexKpiCompletByDate> htereceivedXdbmYskMap = getHtereceivedXdbmYskMapFuture.join();
+//
+//                    // 责任部门排行
+//                    CompletableFuture<Void> setKpiDataZrbmList = CompletableFuture.runAsync(() -> {
+//                        for(IndexKpiCompletByDate kpiDataZrbm:kpiDataZrbmList){
+//                            // 1到10月份的合同额
+//                            IndexKpiCompletByDate htereceivedZrbmCl = htereceivedZrbmClMap.getOrDefault(kpiDataZrbm.getDepart(), kpiDataZrbm);
+//                            // 当前日期之前的所有的合同额
+//                            IndexKpiCompletByDate htereceivedZrbm = htereceivedZrbmMap.getOrDefault(kpiDataZrbm.getDepart(), kpiDataZrbm);
+//                            // 10月份之前的所有的合同额
+//                            IndexKpiCompletByDate htereceivedZrbmLast = htereceivedZrbmLastMap.getOrDefault(kpiDataZrbm.getDepart(), kpiDataZrbm);
+//                            // 显示的当年的合同额 = 1到10月份的合同额 + (当前日期之前的所有的合同额 - 10月份之前的所有的合同额)
+//                            kpiDataZrbm.setContractAmount(htereceivedZrbmCl.getContractAmount().add(htereceivedZrbm.getContractAmount().subtract(htereceivedZrbmLast.getContractAmount())));
+//                            // 显示的当年的已收款 = 1到10月份的已收款 + (当前日期之前的所有的已收款 - 10月份之前的所有的已收款)
+//                            kpiDataZrbm.setReceived(htereceivedZrbmCl.getReceived().add(htereceivedZrbm.getReceived().subtract(htereceivedZrbmLast.getReceived())));
+//                            // 计算 当年的完成度 = 当年的合同额 / 当年的指标
+//                            if(kpiDataZrbm.getDepartKpi() != null){
+//                                if(kpiDataZrbm.getDepartKpi().equals(BigDecimal.valueOf(0))){
+//                                    kpiDataZrbm.setKpiCompletRate(BigDecimal.valueOf(1));
+//                                }else{
+//                                    kpiDataZrbm.setKpiCompletRate(kpiDataZrbm.getContractAmount().divide(kpiDataZrbm.getDepartKpi(), 2, RoundingMode.HALF_UP));
+//                                }
+//                            }
+//                        }
+//                        //责任部门 根据指标进行排序
+//                        kpiDataZrbmList.sort(Comparator.comparing(IndexKpiCompletByDate::getKpiCompletRate, Comparator.nullsFirst(BigDecimal::compareTo)).reversed());
+//                    });
+//
+//                    // 下达部门排行
+//                    CompletableFuture<Void> setKpiDataXdbmList = CompletableFuture.runAsync(() -> {
+//                        for (IndexKpiCompletByDate kpiDataXdbm:kpiDataJycsList) {
+//                            IndexKpiCompletByDate htereceivedXdbmHte = htereceivedXdbmHteMap.getOrDefault(kpiDataXdbm.getDepart(), kpiDataXdbm);
+//                            IndexKpiCompletByDate htereceivedXdbmYsk = htereceivedXdbmYskMap.getOrDefault(kpiDataXdbm.getDepart(), kpiDataXdbm);
+//                            kpiDataXdbm.setContractAmount(htereceivedXdbmHte.getContractAmount()); // 合同额
+//                            kpiDataXdbm.setReceived(htereceivedXdbmYsk.getReceived()); // 已收款
+//
+//                            if(kpiDataXdbm.getDepartKpi() != null){
+//                                if(kpiDataXdbm.getDepartKpi().equals(BigDecimal.valueOf(0))){
+//                                    kpiDataXdbm.setKpiCompletRate(BigDecimal.valueOf(1));
+//                                }else{
+//                                    kpiDataXdbm.setKpiCompletRate(kpiDataXdbm.getReceived().divide(kpiDataXdbm.getDepartKpi(), 2, RoundingMode.HALF_UP));
+//                                }
+//                            }
+//                        }
+//                        //下达部门 根据指标进行排序
+//                        kpiDataJycsList.sort(Comparator.comparing(IndexKpiCompletByDate::getKpiCompletRate, Comparator.nullsFirst(BigDecimal::compareTo)).reversed());
+//                    });
+//
+//                    CompletableFuture<Void> future1 = CompletableFuture.allOf(setKpiDataZrbmList,setKpiDataXdbmList);
+//                    future1.join();
+//
+//                    indexKpiDataDepart.setZrbmCharts(kpiDataZrbmList);
+//                    indexKpiDataDepart.setJycsCharts(kpiDataJycsList);
+//                    return indexKpiDataDepart;
+//                }
+//            }else
+            if (timeType.equals("month")){
                 if (clYearMonth.contains(finalDateYm)){
                     // 责任 部门
                     CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedZrbmMapFuture = CompletableFuture.supplyAsync(() -> {
@@ -423,27 +433,19 @@ public class IndexKpiServiceImpl implements IndexKpiService {
             // 那么 责任部门 的合同额 = (当前月份的合同额 * 当前月份的项目进度(当前月份之前的总进度-上个月之前的总进度)) ; 已收款 = (当前月份的已收款 - 上个月的已收款)
             //     下达部门 的合同额 = 签署日期是当前年份的合同额之和 ; 已收款 = 到款日期是当前年份的已收款之和
 
-            //责任部门 获取选择年月的数据  合同额、已收款
+            //责任部门 获取选择年月的数据  合同额、已收款 (不是当年当月的)
             CompletableFuture<Map<String, IndexKpiCompletByDate>> getHtereceivedZrbmMapFuture = CompletableFuture.supplyAsync(() -> {
                 Map<String, IndexKpiCompletByDate> htereceivedZrbmMap = new TreeMap<>();//用来保存部门该月合计的合同额、已收款以及责任部门
 //                List<IndexKpiCompletByDate> htereceivedZrbmList = indexKpiMapper.getHteReceivedZrbmYm(finalDateYm, zrbmList);
-                List<IndexKpiCompletByDate> htereceivedZrbmList = indexKpiMapper.getHteReceivedZrbmSelectYm(finalDateYm,finalDateLastYm, zrbmList);
-                for(IndexKpiCompletByDate htereceivedZrbm:htereceivedZrbmList){
-                    htereceivedZrbmMap.put(htereceivedZrbm.getDepart(), htereceivedZrbm);
+                List<IndexKpiCompletByDate> htereceivedZrbmList = new ArrayList<>();
+                if (!finalIsCurrentDate){
+                    htereceivedZrbmList = indexKpiMapper.getHteReceivedZrbmSelectYm(finalDateYm,finalDateLastYm, zrbmList);
+                    for(IndexKpiCompletByDate htereceivedZrbm:htereceivedZrbmList){
+                        htereceivedZrbmMap.put(htereceivedZrbm.getDepart(), htereceivedZrbm);
+                    }
                 }
                 return htereceivedZrbmMap;
             });
-            //责任部门 获取选择年月上月的数据  合同额、已收款
-//            CompletableFuture<Map<String, IndexKpiCompletByDate>> getHtereceivedZrbmLastMapFuture = CompletableFuture.supplyAsync(() -> {
-//                Map<String, IndexKpiCompletByDate> htereceivedZrbmLastMap = new TreeMap<>();//用来保存部门上月合计的合同额、已收款以及责任部门
-//                if (zrbmList.isEmpty()) return htereceivedZrbmLastMap;
-//                //List<IndexKpiCompletByDate> htereceivedZrbmLastList = indexKpiMapper.getHteReceivedZrbmYm(finalDateLastYm, departList);
-//                List<IndexKpiCompletByDate> htereceivedZrbmLastList = indexKpiMapper.getHteReceivedZrbmYm(finalDateLastYm, zrbmList);
-//                for(IndexKpiCompletByDate htereceivedZrbmLast:htereceivedZrbmLastList){
-//                    htereceivedZrbmLastMap.put(htereceivedZrbmLast.getDepart(), htereceivedZrbmLast);
-//                }
-//                return htereceivedZrbmLastMap;
-//            });
             // 求下达部门的合同额
             CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedXdbmHteMapFuture = CompletableFuture.supplyAsync(() -> {
                 Map<String, IndexKpiCompletByDate> htereceivedXdbmHteMap = new TreeMap<>();//用来保存部门上月合计的合同额、已收款以及责任部门
@@ -469,34 +471,22 @@ public class IndexKpiServiceImpl implements IndexKpiService {
             // 责任部门
             CompletableFuture<Map<String, IndexKpiCompletByDate>> getHtereceivedZrbmFinalFuture = CompletableFuture.supplyAsync(() -> {
                 Map<String, IndexKpiCompletByDate> htereceivedZrbmFinalMap = new TreeMap<>();
-                List<IndexKpiCompletByDate> rList = new ArrayList<>();
-                List<IndexKpiCompletByDate> zrbmKpiList = (List<IndexKpiCompletByDate>) redisUtil.get(CacheKey.INDEX_ZRBM_FINAL);
-                if(zrbmKpiList != null && zrbmKpiList.size() > 0 && zrbmKpiList.get(0) != null){
-                    rList = zrbmKpiList;
-                }else {
-                    rList = indexKpiMapper.getFinallNum(finalDateLastYm, zrbmList);
-                    redisUtil.set(CacheKey.INDEX_ZRBM_FINAL,rList,1000L * 60 * 60 * 10);
-                }
-//                List<IndexKpiCompletByDate> list = indexKpiMapper.getFinallNum(finalDateLastYm, zrbmList);
-                for (IndexKpiCompletByDate i : rList){
-                    htereceivedZrbmFinalMap.put(i.getDepart(),i);
+                if (finalIsCurrentDate){
+                    List<IndexKpiCompletByDate> rList = indexKpiMapper.getFinallNum(finalDateLastYm, zrbmList);
+                    for (IndexKpiCompletByDate i : rList){
+                        htereceivedZrbmFinalMap.put(i.getDepart(),i);
+                    }
                 }
                 return htereceivedZrbmFinalMap;
             });
 
             CompletableFuture<Map<String, IndexKpiCompletByDate>> getHtereceivedZrbmNewFuture = CompletableFuture.supplyAsync(() -> {
                 Map<String, IndexKpiCompletByDate> htereceivedZrbmNewMap = new TreeMap<>();
-                List<IndexKpiCompletByDate> rList = new ArrayList<>();
-                List<IndexKpiCompletByDate> zrbmKpiList = (List<IndexKpiCompletByDate>)redisUtil.get(CacheKey.INDEX_ZRBM_NEW);
-                if (zrbmKpiList != null && zrbmKpiList.size() > 0 && zrbmKpiList.get(0) != null){
-                    rList = zrbmKpiList;
-                }else {
-                    rList = indexKpiMapper.getNewNum(finalDateLastYm, zrbmList);
-                    redisUtil.set(CacheKey.INDEX_ZRBM_NEW,rList,1000L * 60 * 60 * 10);
-                }
-//                List<IndexKpiCompletByDate> list = indexKpiMapper.getNewNum(finalDateLastYm, zrbmList);
-                for (IndexKpiCompletByDate i : rList){
-                    htereceivedZrbmNewMap.put(i.getDepart(),i);
+                if (finalIsCurrentDate){
+                    List<IndexKpiCompletByDate> rList = indexKpiMapper.getNewNum(finalDateLastYm, zrbmList);
+                    for (IndexKpiCompletByDate i : rList){
+                        htereceivedZrbmNewMap.put(i.getDepart(),i);
+                    }
                 }
                 return htereceivedZrbmNewMap;
             });
@@ -534,13 +524,6 @@ public class IndexKpiServiceImpl implements IndexKpiService {
                             kpiDataZrbm.setContractAmount(htereceivedZrbm.getContractAmount().setScale(2, RoundingMode.HALF_UP));
                         }
                         kpiDataZrbm.setReceived(htereceivedZrbm.getReceived().setScale(2, RoundingMode.HALF_UP));
-//                        IndexKpiCompletByDate htereceivedZrbmLast = htereceivedZrbmLastMap.getOrDefault(kpiDataZrbm.getDepart(), kpiDataZrbm);
-//                        if(htereceivedZrbm.getContractAmount() == null || htereceivedZrbmLast.getContractAmount() == null){
-//                            kpiDataZrbm.setContractAmount(BigDecimal.valueOf(0).setScale(2, RoundingMode.HALF_UP));
-//                        }else {
-//                            kpiDataZrbm.setContractAmount(htereceivedZrbm.getContractAmount().subtract(htereceivedZrbmLast.getContractAmount()).setScale(2, RoundingMode.HALF_UP));//合同额
-//                        }
-//                        kpiDataZrbm.setReceived(htereceivedZrbm.getReceived().subtract(htereceivedZrbmLast.getReceived()).setScale(2, RoundingMode.HALF_UP));//已收款
                     }
                     //计算完成度  合同额(是计算的某个月或某个年的合同额 增量)/ 指标
                     if(kpiDataZrbm.getDepartKpi() != null){
@@ -573,21 +556,6 @@ public class IndexKpiServiceImpl implements IndexKpiService {
                             kpiDataJycs.setKpiCompletRate(kpiDataJycs.getReceived().divide(kpiDataJycs.getDepartKpi(), 2, RoundingMode.HALF_UP));
                         }
                     }
-                    ////根据部门找到今年的合同额和已收款
-                    //IndexKpiCompletByDate htereceivedJycs = htereceivedJycsMap.getOrDefault(kpiDataJycs.getDepart(), kpiDataJycs);
-                    //IndexKpiCompletByDate htereceivedJycsLast = htereceivedJycsLastMap.getOrDefault(kpiDataJycs.getDepart(), kpiDataJycs);
-                    ////kpiDataJycs.setContractAmount(htereceivedJycs.getContractAmount().subtract(htereceivedJycsLast.getContractAmount()).setScale(2, RoundingMode.HALF_UP));//合同额
-                    //kpiDataJycs.setContractAmount(htereceivedJycs.getContractAmount());//合同额
-                    //kpiDataJycs.setReceived(htereceivedJycs.getReceived().subtract(htereceivedJycsLast.getReceived()).setScale(2, RoundingMode.HALF_UP));//已收款
-                    //
-                    ////计算完成度  合同额(是计算的某个月或某个年的合同额 增量)/ 指标
-                    //if(kpiDataJycs.getDepartKpi() != null){
-                    //    if(kpiDataJycs.getDepartKpi().equals(BigDecimal.valueOf(0))){
-                    //        kpiDataJycs.setKpiCompletRate(BigDecimal.valueOf(1));
-                    //    }else{
-                    //        kpiDataJycs.setKpiCompletRate(kpiDataJycs.getContractAmount().divide(kpiDataJycs.getDepartKpi(), 2, RoundingMode.HALF_UP));
-                    //    }
-                    //}
                 }
 //            System.out.println("kpiDataJycsList");
                 //下达部门指标完成度排序
@@ -602,6 +570,8 @@ public class IndexKpiServiceImpl implements IndexKpiService {
         }
         System.out.println(indexKpiDataDepart);
 
+        redisUtil.set(CacheKey.INDEX_ZRBM_NEW+":"+indexKpiParamDto.getTime()+":"+indexKpiParamDto.getBeginDate(),indexKpiDataDepart,1000L * 60 * 60 * 10);
+
         return indexKpiDataDepart;
     }
 

+ 1 - 1
module_kzks/src/main/java/org/jeecg/modules/Index/util/RedisCacheMethod.java

@@ -20,6 +20,6 @@ public class RedisCacheMethod {
         redisUtil.removeAll(CacheKey.PROJECT_COST + ":*");
         redisUtil.removeAll(CacheKey.CLF_COMPARE_RESULT_VOS+":*");
         redisUtil.removeAll(CacheKey.INDEX_ZRBM_FINAL);
-        redisUtil.removeAll(CacheKey.INDEX_ZRBM_NEW);
+        redisUtil.removeAll(CacheKey.INDEX_ZRBM_NEW+":*");
     }
 }

+ 4 - 2
module_kzks/src/main/java/org/jeecg/modules/costModelProductPrice/controller/KzksCostModelProductPriceController.java

@@ -119,8 +119,10 @@ public class KzksCostModelProductPriceController extends JeecgController<KzksCos
 	//@RequiresPermissions("org.jeecg.modules:kzks_cost_model_product_price:delete")
 	@DeleteMapping(value = "/delete")
 	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
-		kzksCostModelProductPriceService.updateStatusByTasknos(id);
-		boolean b = kzksCostModelProductPriceService.removeById(id);
+		int i = kzksCostModelProductPriceService.updateStatusByTasknos(id);
+		if (i != 0){
+			boolean b = kzksCostModelProductPriceService.removeById(id);
+		}
 		redisUtil.removeAll(CacheKey.PROJECT_COST_HUIJI);
 		redisUtil.removeAll(CacheKey.PROJECT_COST);
 		return Result.OK("删除成功!");

+ 1 - 1
module_kzks/src/main/java/org/jeecg/modules/costModelProductPrice/service/impl/KzksCostModelProductPriceServiceImpl.java

@@ -61,7 +61,7 @@ public class KzksCostModelProductPriceServiceImpl extends ServiceImpl<KzksCostMo
     public int updateStatusByTasknos(String ids) {
         List<String> idList = Arrays.asList(ids.split(","));
         List<String> tasknoList = productPriceMapper.getProductPriceListByIds(idList);
-        int i = projectCostHuijiMapper.updateStatus2(tasknoList);
+        int i = projectCostHuijiService.updateStatus2(tasknoList);
         return i;
     }
 

+ 6 - 1
module_kzks/src/main/java/org/jeecg/modules/projectCostHuiji/controller/ProjectCostHuijiController.java

@@ -38,6 +38,7 @@ import org.jeecg.modules.projectCostHuiji.vo.ProjectCostHuijiSumVO;
 import org.jeecg.modules.projectCostYs.entity.KzksProjectCostYs;
 import org.jeecg.modules.projectCostYs.service.IKzksProjectCostYsService;
 import org.jeecg.modules.system.mapper.SysDepartMapper;
+import org.jeecg.modules.wzOutboundOrderBNew.service.IWzOutboundOrderBNewService;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
 import org.jeecgframework.poi.excel.entity.ExportParams;
 import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
@@ -93,6 +94,10 @@ public class ProjectCostHuijiController extends JeecgController<ProjectCostHuiji
     @Autowired
     private IKzksCostModelProductPriceService costModelProductPriceService;
 
+    @Autowired
+    @SuppressWarnings("all")
+    private IWzOutboundOrderBNewService orderBNewService;
+
     @ApiOperation(value = "111111111111")
     @GetMapping(value = "/children1")
     public List<ProjectCostVO> children1(String taskno) {
@@ -535,7 +540,7 @@ public class ProjectCostHuijiController extends JeecgController<ProjectCostHuiji
     @RequestMapping(value = "/exportZcbXls")
     public ModelAndView exportZcbXls(@RequestParam(required = false) String taskno,HttpServletRequest request) {
         //return indexNewServer.exportCbeDetail(departNameList,request, WzOutboundOrderBNew.class, "成本额详情");
-        return projectCostHuijiService.exportZcbDetail(Arrays.asList(taskno.split(",")),request);
+        return orderBNewService.exportZcbDetail(Arrays.asList(taskno.split(",")),request);
     }
 
 

+ 1 - 1
module_kzks/src/main/java/org/jeecg/modules/projectCostHuiji/service/IProjectCostHuijiService.java

@@ -52,6 +52,7 @@ public interface IProjectCostHuijiService extends IService<ProjectCostHuiji> {
     ProjectCostHuiji costHJSumIsStaff(ProjectCostHuiji finalProjectCostHuiji, String realname);
 
     int updateStatus1(ArrayList<String> tasknoList);
+    int updateStatus2(List<String> tasknoList);
 
     /**
      * 项目成本——导出项目成本excel
@@ -59,5 +60,4 @@ public interface IProjectCostHuijiService extends IService<ProjectCostHuiji> {
      */
     public ModelAndView exportXlsProjectCost(HttpServletRequest request, ProjectCostHuiji projectCostHuiji, Class<ProjectCostHuiji> clazz, String title, String isFolding);
 
-    ModelAndView exportZcbDetail(List<String> tasknoList, HttpServletRequest request);
 }

+ 5 - 136
module_kzks/src/main/java/org/jeecg/modules/projectCostHuiji/service/impl/ProjectCostHuijiServiceImpl.java

@@ -107,43 +107,7 @@ public class ProjectCostHuijiServiceImpl extends ServiceImpl<ProjectCostHuijiMap
     @Autowired
     private RedisUtil redisUtil;
 
-    @Autowired
-    private IWzOutboundOrderHService wzOutboundOrderHService;
 
-    @Autowired
-    @SuppressWarnings("all")
-    private IProjectChbZyfService zyfService;
-
-    @Autowired
-    @SuppressWarnings("all")
-    private IKzksProjectChbZjfService zjfService;
-
-    @Autowired
-    @SuppressWarnings("all")
-    private IProjectChbWxfService wxfService;
-
-    @Autowired
-    @SuppressWarnings("all")
-    private IProjectChbSxfService sxfService;
-
-    @Autowired
-    @SuppressWarnings("all")
-    private IProjectChbSwfService swfService;
-
-    @Autowired
-    @SuppressWarnings("all")
-    private IKzksProjectChbRdfService rdfService;
-
-    @Autowired
-    @SuppressWarnings("all")
-    private IKzksProjectChbRgfService rgfService;
-
-    @Autowired
-    @SuppressWarnings("all")
-    private IKzksProjectChbGlfService glfService;
-
-    @Value("${jeecg.path.upload}")
-    private String upLoadPath;
 
 
     /**
@@ -246,6 +210,11 @@ public class ProjectCostHuijiServiceImpl extends ServiceImpl<ProjectCostHuijiMap
         return huijiMapper.updateStatus1(tasknoList);
     }
 
+    @Override
+    public int updateStatus2(List<String> tasknoList) {
+        return huijiMapper.updateStatus2(tasknoList);
+    }
+
     /**
      *   查询汇集表
      */
@@ -390,105 +359,5 @@ public class ProjectCostHuijiServiceImpl extends ServiceImpl<ProjectCostHuijiMap
     }
 
 
-    @Override
-    public ModelAndView exportZcbDetail(List<String> tasknoList, HttpServletRequest request) {
-        // 材料费
-        List<WzOutboundOrderBNewExport> wzList = wzOutboundOrderHService.getClfListByTasknos1(tasknoList);
-        // 专用费
-        List<ProjectChbZyfExpoet> zyfList = zyfService.getZYFDetailListByTasknos1(tasknoList);
-        // 事务费
-        List<ProjectChbZyfExpoet> swfList = swfService.getSWFDetailListByTasknos1(tasknoList);
-        // 外协费
-        List<ProjectChbZyfExpoet> wxfList = wxfService.getWXFDetailListByTasknos1(tasknoList);
-        // 燃料动力费
-        List<ProjectChbZyfExpoet> rdfList = rdfService.getRDFDetailListByTasknos1(tasknoList);
-        // 折旧费
-        List<ProjectChbZyfExpoet> zjfList = zjfService.getZJFDetailListByTasknos1(tasknoList);
-        // 工资及劳务费
-        List<ProjectChbZyfExpoet> rgfList = rgfService.getRGFDetailListByTasknos1(tasknoList);
-        // 管理费
-        List<ProjectChbZyfExpoet> glfList = glfService.getGLFDetailListByTasknos1(tasknoList);
-        // 筛选费
-        List<ProjectChbZyfExpoet> sxfList = sxfService.getSXFDetailListByTasknos1(tasknoList);
-
-        // 调用导出excel的方法 一个费用一个sheet
-        return exportZcbExcel(wzList,zyfList,swfList,wxfList,rdfList,zjfList,rgfList,glfList,sxfList);
-    }
-
-    public ModelAndView exportZcbExcel(List<WzOutboundOrderBNewExport> wzList, List<ProjectChbZyfExpoet> zyfList, List<ProjectChbZyfExpoet> swfList, List<ProjectChbZyfExpoet> wxfList, List<ProjectChbZyfExpoet> rdfList, List<ProjectChbZyfExpoet> zjfList, List<ProjectChbZyfExpoet> rgfList, List<ProjectChbZyfExpoet> glfList, List<ProjectChbZyfExpoet> sxfList) {
-        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        String title = "总成本明细";
-
-        Map<String, Object> sheet1Map = new HashMap<>();
-        sheet1Map.put(NormalExcelConstants.CLASS, WzOutboundOrderBNewExport.class);
-        ExportParams exportParam1=new ExportParams(  "材料费报表", "导出人:" + sysUser.getRealname(), "材料费");
-        exportParam1.setImageBasePath(upLoadPath);
-        sheet1Map.put(NormalExcelConstants.PARAMS,exportParam1);
-        sheet1Map.put(NormalExcelConstants.DATA_LIST,wzList);
-
-        Map<String, Object> sheet2Map = new HashMap<>();
-        sheet2Map.put(NormalExcelConstants.CLASS, ProjectChbZyfExpoet.class);
-        ExportParams exportParam2=new ExportParams(  "专用费报表", "导出人:" + sysUser.getRealname(), "专用费");
-        exportParam2.setImageBasePath(upLoadPath);
-        sheet2Map.put(NormalExcelConstants.PARAMS,exportParam2);
-        sheet2Map.put(NormalExcelConstants.DATA_LIST,zyfList);
-
-        Map<String, Object> sheet3Map = new HashMap<>();
-        sheet3Map.put(NormalExcelConstants.CLASS,ProjectChbZyfExpoet.class);
-        ExportParams exportParam3=new ExportParams(  "事务费报表", "导出人:" + sysUser.getRealname(), "事务费");
-        exportParam3.setImageBasePath(upLoadPath);
-        sheet3Map.put(NormalExcelConstants.PARAMS,exportParam3);
-        sheet3Map.put(NormalExcelConstants.DATA_LIST,swfList);
-
-        Map<String, Object> sheet4Map = new HashMap<>();
-        sheet4Map.put(NormalExcelConstants.CLASS,ProjectChbZyfExpoet.class);
-        ExportParams exportParam4=new ExportParams(  "外协费报表", "导出人:" + sysUser.getRealname(), "外协费");
-        exportParam4.setImageBasePath(upLoadPath);
-        sheet4Map.put(NormalExcelConstants.PARAMS,exportParam4);
-        sheet4Map.put(NormalExcelConstants.DATA_LIST,wxfList);
-
-        Map<String, Object> sheet5Map = new HashMap<>();
-        sheet5Map.put(NormalExcelConstants.CLASS,ProjectChbZyfExpoet.class);
-        ExportParams exportParam5=new ExportParams(  "燃料动力费报表", "导出人:" + sysUser.getRealname(), "燃料动力费");
-        exportParam5.setImageBasePath(upLoadPath);
-        sheet5Map.put(NormalExcelConstants.PARAMS,exportParam5);
-        sheet5Map.put(NormalExcelConstants.DATA_LIST,rdfList);
-
-        Map<String, Object> sheet6Map = new HashMap<>();
-        sheet6Map.put(NormalExcelConstants.CLASS,ProjectChbZyfExpoet.class);
-        ExportParams exportParam6=new ExportParams(  "固定资产折旧费报表", "导出人:" + sysUser.getRealname(), "固定资产折旧费");
-        exportParam6.setImageBasePath(upLoadPath);
-        sheet6Map.put(NormalExcelConstants.PARAMS,exportParam6);
-        sheet6Map.put(NormalExcelConstants.DATA_LIST,zjfList);
-
-        Map<String, Object> sheet7Map = new HashMap<>();
-        sheet7Map.put(NormalExcelConstants.CLASS,ProjectChbZyfExpoet.class);
-        ExportParams exportParam7=new ExportParams(  "工资及劳务费报表", "导出人:" + sysUser.getRealname(), "工资及劳务费");
-        exportParam7.setImageBasePath(upLoadPath);
-        sheet7Map.put(NormalExcelConstants.PARAMS,exportParam7);
-        sheet7Map.put(NormalExcelConstants.DATA_LIST,rgfList);
-
-        Map<String, Object> sheet8Map = new HashMap<>();
-        sheet8Map.put(NormalExcelConstants.CLASS,ProjectChbZyfExpoet.class);
-        ExportParams exportParam8=new ExportParams(  "管理费报表", "导出人:" + sysUser.getRealname(), "管理费");
-        exportParam8.setImageBasePath(upLoadPath);
-        sheet8Map.put(NormalExcelConstants.PARAMS,exportParam8);
-        sheet8Map.put(NormalExcelConstants.DATA_LIST,glfList);
-
-        Map<String, Object> sheet9Map = new HashMap<>();
-        sheet9Map.put(NormalExcelConstants.CLASS,ProjectChbZyfExpoet.class);
-        ExportParams exportParam9=new ExportParams(  "筛选费报表", "导出人:" + sysUser.getRealname(), "筛选费");
-        exportParam9.setImageBasePath(upLoadPath);
-        sheet9Map.put(NormalExcelConstants.PARAMS,exportParam9);
-        sheet9Map.put(NormalExcelConstants.DATA_LIST,sxfList);
-
-        List<Map<String, Object>> sheetList = Stream.of(sheet1Map, sheet2Map, sheet3Map, sheet4Map, sheet5Map, sheet6Map, sheet7Map, sheet8Map, sheet9Map).collect(Collectors.toList());
-
 
-        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
-        mv.addObject(NormalExcelConstants.FILE_NAME,title);
-        mv.addObject(NormalExcelConstants.MAP_LIST,sheetList);
-
-        return mv;
-    }
 }

+ 1 - 1
module_kzks/src/main/java/org/jeecg/modules/wzOutboundOrder/service/impl/WzOutboundOrderBServiceImpl.java

@@ -22,7 +22,7 @@ import java.util.List;
  * @Version: V1.0
  */
 @Service
-@TargetDataSource
+//@TargetDataSource
 public class WzOutboundOrderBServiceImpl extends ServiceImpl<WzOutboundOrderBMapper, WzOutboundOrderB> implements IWzOutboundOrderBService {
 
     @Autowired

+ 5 - 0
module_kzks/src/main/java/org/jeecg/modules/wzOutboundOrderBNew/service/IWzOutboundOrderBNewService.java

@@ -4,7 +4,9 @@ import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.wzOutboundOrderBNew.entity.WzOutboundOrderBNew;
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.jeecg.modules.wzOutboundOrderBNew.entity.WzOutboundOrderBNewExport;
+import org.springframework.web.servlet.ModelAndView;
 
+import javax.servlet.http.HttpServletRequest;
 import java.io.IOException;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
@@ -21,4 +23,7 @@ public interface IWzOutboundOrderBNewService extends IService<WzOutboundOrderBNe
     Result<?> importExcelNew(String strUrl, Class<WzOutboundOrderBNew> clazz) throws IOException;
 
     List<WzOutboundOrderBNewExport> getClfDetailIfBoss1(String nowMonth);
+
+    ModelAndView exportZcbDetail(List<String> tasknoList, HttpServletRequest request);
+
 }

+ 164 - 0
module_kzks/src/main/java/org/jeecg/modules/wzOutboundOrderBNew/service/impl/WzOutboundOrderBNewServiceImpl.java

@@ -10,12 +10,24 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.ss.usermodel.WorkbookFactory;
+import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.DateUtils;
 import org.jeecg.modules.dataSourceSwitch.annotation.UseSlaveDataSource;
 import org.jeecg.modules.message.websocket.WebSocket;
+import org.jeecg.modules.projectChbGlf.service.IKzksProjectChbGlfService;
+import org.jeecg.modules.projectChbRdf.service.IKzksProjectChbRdfService;
+import org.jeecg.modules.projectChbRgf.service.IKzksProjectChbRgfService;
+import org.jeecg.modules.projectChbSwf.service.IProjectChbSwfService;
+import org.jeecg.modules.projectChbSxf.service.IProjectChbSxfService;
+import org.jeecg.modules.projectChbWxf.service.IProjectChbWxfService;
+import org.jeecg.modules.projectChbZjf.service.IKzksProjectChbZjfService;
+import org.jeecg.modules.projectChbZyf.entity.ProjectChbZyfExpoet;
+import org.jeecg.modules.projectChbZyf.service.IProjectChbZyfService;
 import org.jeecg.modules.projectImportList.readListener.ProjectChbImportReadListener;
 import org.jeecg.modules.projectKmbh.entity.KzksProjectKmbh;
+import org.jeecg.modules.wzOutboundOrder.service.IWzOutboundOrderHService;
 import org.jeecg.modules.wzOutboundOrderBNew.entity.WzOutboundOrderBNew;
 import org.jeecg.modules.wzOutboundOrderBNew.entity.WzOutboundOrderBNewExport;
 import org.jeecg.modules.wzOutboundOrderBNew.mapper.WzOutboundOrderBNewMapper;
@@ -23,19 +35,27 @@ import org.jeecg.modules.wzOutboundOrderBNew.monitor.WzOutboundOrderBNewListener
 import org.jeecg.modules.wzOutboundOrderBNew.monitor.WzOutboundOrderBNewListerner;
 import org.jeecg.modules.wzOutboundOrderBNew.service.IWzOutboundOrderBNewService;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
 import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.web.servlet.ModelAndView;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 import java.io.*;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * @Description: wz_outbound_order_b_new
@@ -56,6 +76,45 @@ public class WzOutboundOrderBNewServiceImpl extends ServiceImpl<WzOutboundOrderB
 
     private ExecutorService executorService = Executors.newFixedThreadPool(5);
 
+
+    @Autowired
+    private IWzOutboundOrderHService wzOutboundOrderHService;
+
+    @Autowired
+    @SuppressWarnings("all")
+    private IProjectChbZyfService zyfService;
+
+    @Autowired
+    @SuppressWarnings("all")
+    private IKzksProjectChbZjfService zjfService;
+
+    @Autowired
+    @SuppressWarnings("all")
+    private IProjectChbWxfService wxfService;
+
+    @Autowired
+    @SuppressWarnings("all")
+    private IProjectChbSxfService sxfService;
+
+    @Autowired
+    @SuppressWarnings("all")
+    private IProjectChbSwfService swfService;
+
+    @Autowired
+    @SuppressWarnings("all")
+    private IKzksProjectChbRdfService rdfService;
+
+    @Autowired
+    @SuppressWarnings("all")
+    private IKzksProjectChbRgfService rgfService;
+
+    @Autowired
+    @SuppressWarnings("all")
+    private IKzksProjectChbGlfService glfService;
+
+    @Value("${jeecg.path.upload}")
+    private String upLoadPath;
+
     @Override
     public Result<?> importExcel1(String strUrl, Class<WzOutboundOrderBNew> clazz) throws InterruptedException, ExecutionException, IOException{
         int year = DateUtils.getYear();
@@ -186,4 +245,109 @@ public class WzOutboundOrderBNewServiceImpl extends ServiceImpl<WzOutboundOrderB
 
         return resultList;
     }
+
+
+
+
+    @Override
+    public ModelAndView exportZcbDetail(List<String> tasknoList, HttpServletRequest request) {
+        // 材料费
+        List<WzOutboundOrderBNewExport> wzList = wzOutboundOrderHService.getClfListByTasknos1(tasknoList);
+        // 专用费
+        List<ProjectChbZyfExpoet> zyfList = zyfService.getZYFDetailListByTasknos1(tasknoList);
+        // 事务费
+        List<ProjectChbZyfExpoet> swfList = swfService.getSWFDetailListByTasknos1(tasknoList);
+        // 外协费
+        List<ProjectChbZyfExpoet> wxfList = wxfService.getWXFDetailListByTasknos1(tasknoList);
+        // 燃料动力费
+        List<ProjectChbZyfExpoet> rdfList = rdfService.getRDFDetailListByTasknos1(tasknoList);
+        // 折旧费
+        List<ProjectChbZyfExpoet> zjfList = zjfService.getZJFDetailListByTasknos1(tasknoList);
+        // 工资及劳务费
+        List<ProjectChbZyfExpoet> rgfList = rgfService.getRGFDetailListByTasknos1(tasknoList);
+        // 管理费
+        List<ProjectChbZyfExpoet> glfList = glfService.getGLFDetailListByTasknos1(tasknoList);
+        // 筛选费
+        List<ProjectChbZyfExpoet> sxfList = sxfService.getSXFDetailListByTasknos1(tasknoList);
+
+        // 调用导出excel的方法 一个费用一个sheet
+        return exportZcbExcel(wzList,zyfList,swfList,wxfList,rdfList,zjfList,rgfList,glfList,sxfList);
+    }
+
+    public ModelAndView exportZcbExcel(List<WzOutboundOrderBNewExport> wzList, List<ProjectChbZyfExpoet> zyfList, List<ProjectChbZyfExpoet> swfList, List<ProjectChbZyfExpoet> wxfList, List<ProjectChbZyfExpoet> rdfList, List<ProjectChbZyfExpoet> zjfList, List<ProjectChbZyfExpoet> rgfList, List<ProjectChbZyfExpoet> glfList, List<ProjectChbZyfExpoet> sxfList) {
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String title = "总成本明细";
+
+        Map<String, Object> sheet1Map = new HashMap<>();
+        sheet1Map.put(NormalExcelConstants.CLASS, WzOutboundOrderBNewExport.class);
+        ExportParams exportParam1=new ExportParams(  "材料费报表", "导出人:" + sysUser.getRealname(), "材料费");
+        exportParam1.setImageBasePath(upLoadPath);
+        sheet1Map.put(NormalExcelConstants.PARAMS,exportParam1);
+        sheet1Map.put(NormalExcelConstants.DATA_LIST,wzList);
+
+        Map<String, Object> sheet2Map = new HashMap<>();
+        sheet2Map.put(NormalExcelConstants.CLASS, ProjectChbZyfExpoet.class);
+        ExportParams exportParam2=new ExportParams(  "专用费报表", "导出人:" + sysUser.getRealname(), "专用费");
+        exportParam2.setImageBasePath(upLoadPath);
+        sheet2Map.put(NormalExcelConstants.PARAMS,exportParam2);
+        sheet2Map.put(NormalExcelConstants.DATA_LIST,zyfList);
+
+        Map<String, Object> sheet3Map = new HashMap<>();
+        sheet3Map.put(NormalExcelConstants.CLASS,ProjectChbZyfExpoet.class);
+        ExportParams exportParam3=new ExportParams(  "事务费报表", "导出人:" + sysUser.getRealname(), "事务费");
+        exportParam3.setImageBasePath(upLoadPath);
+        sheet3Map.put(NormalExcelConstants.PARAMS,exportParam3);
+        sheet3Map.put(NormalExcelConstants.DATA_LIST,swfList);
+
+        Map<String, Object> sheet4Map = new HashMap<>();
+        sheet4Map.put(NormalExcelConstants.CLASS,ProjectChbZyfExpoet.class);
+        ExportParams exportParam4=new ExportParams(  "外协费报表", "导出人:" + sysUser.getRealname(), "外协费");
+        exportParam4.setImageBasePath(upLoadPath);
+        sheet4Map.put(NormalExcelConstants.PARAMS,exportParam4);
+        sheet4Map.put(NormalExcelConstants.DATA_LIST,wxfList);
+
+        Map<String, Object> sheet5Map = new HashMap<>();
+        sheet5Map.put(NormalExcelConstants.CLASS,ProjectChbZyfExpoet.class);
+        ExportParams exportParam5=new ExportParams(  "燃料动力费报表", "导出人:" + sysUser.getRealname(), "燃料动力费");
+        exportParam5.setImageBasePath(upLoadPath);
+        sheet5Map.put(NormalExcelConstants.PARAMS,exportParam5);
+        sheet5Map.put(NormalExcelConstants.DATA_LIST,rdfList);
+
+        Map<String, Object> sheet6Map = new HashMap<>();
+        sheet6Map.put(NormalExcelConstants.CLASS,ProjectChbZyfExpoet.class);
+        ExportParams exportParam6=new ExportParams(  "固定资产折旧费报表", "导出人:" + sysUser.getRealname(), "固定资产折旧费");
+        exportParam6.setImageBasePath(upLoadPath);
+        sheet6Map.put(NormalExcelConstants.PARAMS,exportParam6);
+        sheet6Map.put(NormalExcelConstants.DATA_LIST,zjfList);
+
+        Map<String, Object> sheet7Map = new HashMap<>();
+        sheet7Map.put(NormalExcelConstants.CLASS,ProjectChbZyfExpoet.class);
+        ExportParams exportParam7=new ExportParams(  "工资及劳务费报表", "导出人:" + sysUser.getRealname(), "工资及劳务费");
+        exportParam7.setImageBasePath(upLoadPath);
+        sheet7Map.put(NormalExcelConstants.PARAMS,exportParam7);
+        sheet7Map.put(NormalExcelConstants.DATA_LIST,rgfList);
+
+        Map<String, Object> sheet8Map = new HashMap<>();
+        sheet8Map.put(NormalExcelConstants.CLASS,ProjectChbZyfExpoet.class);
+        ExportParams exportParam8=new ExportParams(  "管理费报表", "导出人:" + sysUser.getRealname(), "管理费");
+        exportParam8.setImageBasePath(upLoadPath);
+        sheet8Map.put(NormalExcelConstants.PARAMS,exportParam8);
+        sheet8Map.put(NormalExcelConstants.DATA_LIST,glfList);
+
+        Map<String, Object> sheet9Map = new HashMap<>();
+        sheet9Map.put(NormalExcelConstants.CLASS,ProjectChbZyfExpoet.class);
+        ExportParams exportParam9=new ExportParams(  "筛选费报表", "导出人:" + sysUser.getRealname(), "筛选费");
+        exportParam9.setImageBasePath(upLoadPath);
+        sheet9Map.put(NormalExcelConstants.PARAMS,exportParam9);
+        sheet9Map.put(NormalExcelConstants.DATA_LIST,sxfList);
+
+        List<Map<String, Object>> sheetList = Stream.of(sheet1Map, sheet2Map, sheet3Map, sheet4Map, sheet5Map, sheet6Map, sheet7Map, sheet8Map, sheet9Map).collect(Collectors.toList());
+
+
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        mv.addObject(NormalExcelConstants.FILE_NAME,title);
+        mv.addObject(NormalExcelConstants.MAP_LIST,sheetList);
+
+        return mv;
+    }
 }