Browse Source

指标排行 -- 责任部门+下达部门

丁治程 1 year ago
parent
commit
b3c52b8edb

+ 6 - 0
module_kzks/src/main/java/org/jeecg/modules/Index/mapper/IndexKpiMapper.java

@@ -49,5 +49,11 @@ public interface IndexKpiMapper {
     List<IndexKpiCompletByDate> getHteReceivedJycsCost(@Param("departList") List<String> departList);
 
 
+    List<IndexKpiCompletByDate> getXdbmHte(@Param("date") String date,@Param("departList") List<String> departList);
 
+    List<IndexKpiCompletByDate> getXdbmYsk(@Param("date") String date,@Param("departList") List<String> departList);
+
+
+    List<IndexKpiCompletByDate> getZrbmHte(@Param("date") String date,@Param("departList") List<String> departList);
+    List<IndexKpiCompletByDate> getZrbmYsk(@Param("date") String date,@Param("departList") List<String> departList);
 }

+ 55 - 0
module_kzks/src/main/java/org/jeecg/modules/Index/mapper/xml/IndexKpiMapper.xml

@@ -41,6 +41,61 @@
         group by jycs
     </select>
 
+    <!-- 下达部门 合同额 -->
+    <select id="getXdbmHte" resultType="org.jeecg.modules.Index.entity.kpi.IndexKpiCompletByDate">
+        SELECT
+            jycs as depart,
+            SUM( contractfpe ) as contractAmount
+        FROM
+            kzks_project_cost
+        WHERE
+            taskno IN ( SELECT rwbh FROM com_contract_info_exchange WHERE sjly = '20' AND qsrq LIKE CONCAT(#{date},'%') )
+          AND jycs IN
+            <foreach item='item' index='index' collection='departList' open='(' separator=',' close=')'>
+                #{item}
+            </foreach>
+        GROUP BY
+            jycs
+    </select>
+
+    <!-- 下达部门 已收款 -->
+    <select id="getXdbmYsk" resultType="org.jeecg.modules.Index.entity.kpi.IndexKpiCompletByDate">
+        SELECT
+            jycs as depart,
+            SUM( TaskMoney ) as received
+        FROM
+            kzks_project_cost
+        WHERE
+            taskno IN ( SELECT rwbh FROM com_contract_info_exchange WHERE sjly = '40' AND dkhpdqrq LIKE CONCAT(#{date},'%') )
+          AND jycs IN
+            <foreach item='item' index='index' collection='departList' open='(' separator=',' close=')'>
+                #{item}
+            </foreach>
+        GROUP BY
+            jycs
+    </select>
 
 
+
+    <!-- 责任部门 合同额 -->
+    <select id="getZrbmHte" resultType="org.jeecg.modules.Index.entity.kpi.IndexKpiCompletByDate">
+        SELECT
+            k.zrbm as depart,
+            SUM( c.htfpe ) as contractAmount
+        FROM
+            com_contract_info_exchange c
+                LEFT JOIN
+                (
+                    SELECT taskno, zrbm FROM ky_task_info WHERE zrbm IN
+                    <foreach item='item' index='index' collection='departList' open='(' separator=',' close=')'>
+                        #{item}
+                    </foreach>
+                    AND yearmonth = #{date}
+                ) k ON c.rwbh = k.taskno
+        WHERE
+            c.sjly = '20'
+          AND qsrq LIKE CONCAT(#{date},'%')
+        GROUP BY
+            k.zrbm
+    </select>
 </mapper>

+ 185 - 71
module_kzks/src/main/java/org/jeecg/modules/Index/service/impl/IndexKpiServiceImpl.java

@@ -435,9 +435,17 @@ public class IndexKpiServiceImpl implements IndexKpiService {
             }
             if(zrbmList.isEmpty() && xdbmList.isEmpty()) return indexKpiDataDepart;
 
+
+            // 判断 前端查询的日期 是否是特殊的日期
+            // 如果前端查询 2023 的数据
+            // 那么 责任部门 的合同额 = (1-10月份100%的合同额之和+当前月份的合同额*当月的项目进度) ; 已收款 = (1-10月份100%的已收款之和+当前月份的已收款)
+            //     下达部门 的合同额 = 签署日期是当前年份的合同额之和 ; 已收款 = 到款日期是当前年份的已收款之和
+            // 如果前端查询 2023-01 到 2023-10 之间任意一个月份的数据
+            // 那么 责任部门 的合同额 = 实际完成时间等于当前月份的100%的合同额之和 ; 已收款 = 实际完成时间等于当前月份的100%的已收款之和
+            //     下达部门 的合同额 = 签署日期是当前年份的合同额之和 ; 已收款 = 到款日期是当前年份的已收款之和
             if (timeType.equals("year")){
                 if (clYear.contains(indexKpiParamDto.getBeginDate())){
-                    // 查询 1到10月份的总合同额
+                    // 责任部门 查询 1到10月份的总合同额
                     CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedZrbmClMapFuture =  CompletableFuture.supplyAsync(() -> {
                         Map<String, IndexKpiCompletByDate> htereceivedZrbmClMap = new TreeMap<>();//用来保存部门该月合计的合同额、已收款以及责任部门
                         List<IndexKpiCompletByDate> zrbmHteCl = projectCostService.getZrbmHteCl(zrbmList);
@@ -446,8 +454,8 @@ public class IndexKpiServiceImpl implements IndexKpiService {
                         }
                         return htereceivedZrbmClMap;
                     });
-                    // 查询 10月份之后的总合同额  当前查询项目和成本表中的所有的 - 十月份的
-                    // 当期的合同额
+                    // 责任部门 查询 10月份之后的总合同额  当前查询项目和成本表中的所有的 - 十月份的
+                    // 责任部门 当期的合同额
                     CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedZrbmMapFuture = CompletableFuture.supplyAsync(() -> {
                         TreeMap<String, IndexKpiCompletByDate> htereceivedZrbmMap = new TreeMap<>();
                         List<IndexKpiCompletByDate> hteReceivedZrbmCost = indexKpiMapper.getHteReceivedZrbmCost(zrbmList);
@@ -456,7 +464,7 @@ public class IndexKpiServiceImpl implements IndexKpiService {
                         }
                         return htereceivedZrbmMap;
                     });
-                    // 10月份的合同额
+                    //  责任部门 10月份的合同额
                     CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedZrbmLastMapFuture = CompletableFuture.supplyAsync(() -> {
                         Map<String, IndexKpiCompletByDate> htereceivedZrbmLastMap = new TreeMap<>();//用来保存部门上月合计的合同额、已收款以及责任部门
                         List<IndexKpiCompletByDate> htereceivedZrbmLastList = indexKpiMapper.getHteReceivedZrbmYm("2023-10", zrbmList);
@@ -466,34 +474,86 @@ public class IndexKpiServiceImpl implements IndexKpiService {
                         return htereceivedZrbmLastMap;
                     });
 
-                    CompletableFuture<Void> future = CompletableFuture.allOf(getHtereceivedZrbmClMapFuture, getHtereceivedZrbmMapFuture, getHtereceivedZrbmLastMapFuture);
+                    // 求下达部门的合同额
+                    CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedXdbmHteMapFuture = CompletableFuture.supplyAsync(() -> {
+                        Map<String, IndexKpiCompletByDate> htereceivedXdbmHteMap = new TreeMap<>();//用来保存部门上月合计的合同额、已收款以及责任部门
+                        List<IndexKpiCompletByDate> xdbmHte = indexKpiMapper.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<>();//用来保存部门上月合计的合同额、已收款以及责任部门
+                        List<IndexKpiCompletByDate> xdbmHte = indexKpiMapper.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();
-                    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));
+                    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());
+                        //责任部门 根据指标进行排序
+                        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.getContractAmount().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")){
@@ -508,19 +568,31 @@ public class IndexKpiServiceImpl implements IndexKpiService {
                         return htereceivedZrbmMap;
                     });
 
-                    // 下达 部门
-                    CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedXdbmMapFuture = CompletableFuture.supplyAsync(() -> {
-                        Map<String, IndexKpiCompletByDate> htereceivedXdbmMap = new TreeMap<>();//用来保存部门该月合计的合同额、已收款以及责任部门
-                        List<IndexKpiCompletByDate> xdbmIndexKpiComplet = projectCostService.getZrbmXdbm(indexKpiParamDto.getBeginDate(), xdbmList);
-                        for (IndexKpiCompletByDate htereceivedXdbm : xdbmIndexKpiComplet){
-                            htereceivedXdbmMap.put(htereceivedXdbm.getDepart(), htereceivedXdbm);
+                    // 下达部门的合同额
+                    CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedXdbmHteMapFuture = CompletableFuture.supplyAsync(() -> {
+                        Map<String, IndexKpiCompletByDate> htereceivedXdbmHteMap = new TreeMap<>();//用来保存部门上月合计的合同额、已收款以及责任部门
+                        List<IndexKpiCompletByDate> xdbmHte = indexKpiMapper.getXdbmHte(indexKpiParamDto.getBeginDate(), xdbmList);
+                        for (IndexKpiCompletByDate d:xdbmHte) {
+                            htereceivedXdbmHteMap.put(d.getDepart(),d);
                         }
-                        return htereceivedXdbmMap;
+                        return htereceivedXdbmHteMap;
                     });
-                    CompletableFuture<Void> future = CompletableFuture.allOf(getHtereceivedZrbmMapFuture,getHtereceivedXdbmMapFuture);
+
+                    // 求下达部门的 已收款
+                    CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedXdbmYskMapFuture = CompletableFuture.supplyAsync(() -> {
+                        Map<String, IndexKpiCompletByDate> htereceivedXdbmYskMap = new TreeMap<>();//用来保存部门上月合计的合同额、已收款以及责任部门
+                        List<IndexKpiCompletByDate> xdbmHte = indexKpiMapper.getXdbmYsk(indexKpiParamDto.getBeginDate(), xdbmList);
+                        for (IndexKpiCompletByDate d:xdbmHte) {
+                            htereceivedXdbmYskMap.put(d.getDepart(),d);
+                        }
+                        return htereceivedXdbmYskMap;
+                    });
+
+                    CompletableFuture<Void> future = CompletableFuture.allOf(getHtereceivedZrbmMapFuture,getHtereceivedXdbmHteMapFuture,getHtereceivedXdbmYskMapFuture);
                     future.join();
                     Map<String, IndexKpiCompletByDate> htereceivedZrbmMap = getHtereceivedZrbmMapFuture.join();
-                    Map<String, IndexKpiCompletByDate> htereceivedXdbmMap = getHtereceivedXdbmMapFuture.join();
+                    Map<String, IndexKpiCompletByDate> htereceivedXdbmHteMap = getHtereceivedXdbmHteMapFuture.join();
+                    Map<String, IndexKpiCompletByDate> htereceivedXdbmYskMap = getHtereceivedXdbmYskMapFuture.join();
 
                     CompletableFuture<Void> setKpiDataZrbmList = CompletableFuture.runAsync(() -> {
                         for (IndexKpiCompletByDate kpiDataZrbm:kpiDataZrbmList) {
@@ -542,9 +614,10 @@ public class IndexKpiServiceImpl implements IndexKpiService {
 
                     CompletableFuture<Void> setKpiDataXdbmList = CompletableFuture.runAsync(() -> {
                         for (IndexKpiCompletByDate kpiDataXdbm:kpiDataJycsList) {
-                            IndexKpiCompletByDate htereceivedXdbm = htereceivedXdbmMap.getOrDefault(kpiDataXdbm.getDepart(), kpiDataXdbm);
-                            kpiDataXdbm.setContractAmount(htereceivedXdbm.getContractAmount()); // 合同额
-                            kpiDataXdbm.setReceived(htereceivedXdbm.getReceived()); // 已收款
+                            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))){
@@ -554,7 +627,7 @@ public class IndexKpiServiceImpl implements IndexKpiService {
                                 }
                             }
                         }
-                        //责任部门 根据指标进行排序
+                        //下达部门 根据指标进行排序
                         kpiDataJycsList.sort(Comparator.comparing(IndexKpiCompletByDate::getKpiCompletRate, Comparator.nullsFirst(BigDecimal::compareTo)).reversed());
                     });
 
@@ -568,6 +641,9 @@ public class IndexKpiServiceImpl implements IndexKpiService {
             }
 
 
+            // 如果 前端 查询的不是 2023 年也不是 2023-01到2023-10的数据
+            // 那么 责任部门 的合同额 = (当前月份的合同额 * 当前月份的项目进度(当前月份之前的总进度-上个月之前的总进度)) ; 已收款 = (当前月份的已收款 - 上个月的已收款)
+            //     下达部门 的合同额 = 签署日期是当前年份的合同额之和 ; 已收款 = 到款日期是当前年份的已收款之和
 
             //责任部门 获取选择年月的数据  合同额、已收款
             CompletableFuture<Map<String, IndexKpiCompletByDate>> getHtereceivedZrbmMapFuture = CompletableFuture.supplyAsync(() -> {
@@ -596,38 +672,63 @@ public class IndexKpiServiceImpl implements IndexKpiService {
                 return htereceivedZrbmLastMap;
             });
             //下达部门 获取选择年月的数据  合同额、已收款
-            CompletableFuture<Map<String, IndexKpiCompletByDate>> getHtereceivedJycsMapFuture = CompletableFuture.supplyAsync(() -> {
-                Map<String, IndexKpiCompletByDate> htereceivedJycsMap = new TreeMap<>();//用来保存部门该月合计的合同额、已收款以及下达部门
-                List<IndexKpiCompletByDate> htereceivedJycsList;
-                //如果选择的日期是当年当月,则从项目成本表里取数据,否则从每月月底项目进度考核表中取
-                if(finalIsCurrentDate){
-                    //htereceivedJycsList = indexKpiMapper.getHteReceivedJycsCost(departList);
-                    htereceivedJycsList = indexKpiMapper.getHteReceivedJycsCost(xdbmList);
-                }else{
-                    htereceivedJycsList = indexKpiMapper.getHteReceivedJycsYm(finalDateYm, xdbmList);
+            //CompletableFuture<Map<String, IndexKpiCompletByDate>> getHtereceivedJycsMapFuture = CompletableFuture.supplyAsync(() -> {
+            //    Map<String, IndexKpiCompletByDate> htereceivedJycsMap = new TreeMap<>();//用来保存部门该月合计的合同额、已收款以及下达部门
+            //    List<IndexKpiCompletByDate> htereceivedJycsList;
+            //    //如果选择的日期是当年当月,则从项目成本表里取数据,否则从每月月底项目进度考核表中取
+            //    if(finalIsCurrentDate){
+            //        //htereceivedJycsList = indexKpiMapper.getHteReceivedJycsCost(departList);
+            //        htereceivedJycsList = indexKpiMapper.getHteReceivedJycsCost(xdbmList);
+            //    }else{
+            //        htereceivedJycsList = indexKpiMapper.getHteReceivedJycsYm(finalDateYm, xdbmList);
+            //    }
+            //
+            //    for(IndexKpiCompletByDate htereceivedJycs:htereceivedJycsList){
+            //        htereceivedJycsMap.put(htereceivedJycs.getDepart(), htereceivedJycs);
+            //    }
+            //    return htereceivedJycsMap;
+            //});
+            ////下达部门 获取选择年月上月的数据  合同额、已收款
+            //CompletableFuture<Map<String, IndexKpiCompletByDate>> getHtereceivedJycsLastMapFuture = CompletableFuture.supplyAsync(() -> {
+            //    Map<String, IndexKpiCompletByDate> htereceivedJycsLastMap = new TreeMap<>();//用来保存部门上月合计的合同额、已收款以及下达部门
+            //    //List<IndexKpiCompletByDate> htereceivedJycsLastList = indexKpiMapper.getHteReceivedJycsYm(finalDateLastYm, departList);
+            //    List<IndexKpiCompletByDate> htereceivedJycsLastList = indexKpiMapper.getHteReceivedJycsYm(finalDateLastYm, xdbmList);
+            //    for(IndexKpiCompletByDate htereceivedJycsLast:htereceivedJycsLastList){
+            //        htereceivedJycsLastMap.put(htereceivedJycsLast.getDepart(), htereceivedJycsLast);
+            //    }
+            //    return htereceivedJycsLastMap;
+            //});
+            //CompletableFuture<Void> future1 = CompletableFuture.allOf(getHtereceivedZrbmMapFuture, getHtereceivedZrbmLastMapFuture, getHtereceivedJycsMapFuture, getHtereceivedJycsLastMapFuture);
+
+            // 求下达部门的合同额
+            CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedXdbmHteMapFuture = CompletableFuture.supplyAsync(() -> {
+                Map<String, IndexKpiCompletByDate> htereceivedXdbmHteMap = new TreeMap<>();//用来保存部门上月合计的合同额、已收款以及责任部门
+                List<IndexKpiCompletByDate> xdbmHte = indexKpiMapper.getXdbmHte(indexKpiParamDto.getBeginDate(), xdbmList);
+                for (IndexKpiCompletByDate d:xdbmHte) {
+                    htereceivedXdbmHteMap.put(d.getDepart(),d);
                 }
-
-                for(IndexKpiCompletByDate htereceivedJycs:htereceivedJycsList){
-                    htereceivedJycsMap.put(htereceivedJycs.getDepart(), htereceivedJycs);
-                }
-                return htereceivedJycsMap;
+                return htereceivedXdbmHteMap;
             });
-            //下达部门 获取选择年月上月的数据  合同额、已收款
-            CompletableFuture<Map<String, IndexKpiCompletByDate>> getHtereceivedJycsLastMapFuture = CompletableFuture.supplyAsync(() -> {
-                Map<String, IndexKpiCompletByDate> htereceivedJycsLastMap = new TreeMap<>();//用来保存部门上月合计的合同额、已收款以及下达部门
-                //List<IndexKpiCompletByDate> htereceivedJycsLastList = indexKpiMapper.getHteReceivedJycsYm(finalDateLastYm, departList);
-                List<IndexKpiCompletByDate> htereceivedJycsLastList = indexKpiMapper.getHteReceivedJycsYm(finalDateLastYm, xdbmList);
-                for(IndexKpiCompletByDate htereceivedJycsLast:htereceivedJycsLastList){
-                    htereceivedJycsLastMap.put(htereceivedJycsLast.getDepart(), htereceivedJycsLast);
+
+            // 求下达部门的 已收款
+            CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedXdbmYskMapFuture = CompletableFuture.supplyAsync(() -> {
+                Map<String, IndexKpiCompletByDate> htereceivedXdbmYskMap = new TreeMap<>();//用来保存部门上月合计的合同额、已收款以及责任部门
+                List<IndexKpiCompletByDate> xdbmHte = indexKpiMapper.getXdbmYsk(indexKpiParamDto.getBeginDate(), xdbmList);
+                for (IndexKpiCompletByDate d:xdbmHte) {
+                    htereceivedXdbmYskMap.put(d.getDepart(),d);
                 }
-                return htereceivedJycsLastMap;
+                return htereceivedXdbmYskMap;
             });
-            CompletableFuture<Void> future1 = CompletableFuture.allOf(getHtereceivedZrbmMapFuture, getHtereceivedZrbmLastMapFuture, getHtereceivedJycsMapFuture, getHtereceivedJycsLastMapFuture);
+
+            //CompletableFuture<Void> future1 = CompletableFuture.allOf(getHtereceivedZrbmMapFuture, getHtereceivedZrbmLastMapFuture);
+            CompletableFuture<Void> future1 = CompletableFuture.allOf(getHtereceivedZrbmMapFuture, getHtereceivedZrbmLastMapFuture,getHtereceivedXdbmHteMapFuture,getHtereceivedXdbmYskMapFuture);
             future1.join();
             Map<String, IndexKpiCompletByDate> htereceivedZrbmMap = getHtereceivedZrbmMapFuture.join();
             Map<String, IndexKpiCompletByDate> htereceivedZrbmLastMap = getHtereceivedZrbmLastMapFuture.join();
-            Map<String, IndexKpiCompletByDate> htereceivedJycsMap = getHtereceivedJycsMapFuture.join();
-            Map<String, IndexKpiCompletByDate> htereceivedJycsLastMap = getHtereceivedJycsLastMapFuture.join();
+            Map<String, IndexKpiCompletByDate> htereceivedXdbmHteMap = getHtereceivedXdbmHteMapFuture.join();
+            Map<String, IndexKpiCompletByDate> htereceivedXdbmYskMap = getHtereceivedXdbmYskMapFuture.join();
+            //Map<String, IndexKpiCompletByDate> htereceivedJycsMap = getHtereceivedJycsMapFuture.join();
+            //Map<String, IndexKpiCompletByDate> htereceivedJycsLastMap = getHtereceivedJycsLastMapFuture.join();
 
             // 责任部门 完成度
             CompletableFuture<Void> setKpiDataZrbmList = CompletableFuture.runAsync(() -> {
@@ -658,21 +759,34 @@ public class IndexKpiServiceImpl implements IndexKpiService {
             CompletableFuture<Void> setKpiDataJycsList = CompletableFuture.runAsync(() -> {
                 //下达部门列表填充合同额、已收款、完成度
                 for(IndexKpiCompletByDate kpiDataJycs:kpiDataJycsList){
-                    //根据部门找到今年的合同额和已收款
-                    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));//已收款
+                    IndexKpiCompletByDate htereceivedJycsHte = htereceivedXdbmHteMap.getOrDefault(kpiDataJycs.getDepart(), kpiDataJycs);
+                    IndexKpiCompletByDate htereceivedJycsYsk = htereceivedXdbmYskMap.getOrDefault(kpiDataJycs.getDepart(), kpiDataJycs);
+                    kpiDataJycs.setContractAmount(htereceivedJycsHte.getContractAmount());
+                    kpiDataJycs.setReceived(htereceivedJycsYsk.getReceived());
 
-                    //计算完成度  合同额(是计算的某个月或某个年的合同额 增量)/ 指标
-                    if(kpiDataJycs.getDepartKpi() != null){
+                    // 计算完成度 当月的合同额 (签署日期为当期查询日期的合同额之和) / 当期的指标
+                    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));
                         }
                     }
+                    ////根据部门找到今年的合同额和已收款
+                    //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");
                 //下达部门指标完成度排序