|
@@ -435,9 +435,17 @@ public class IndexKpiServiceImpl implements IndexKpiService {
|
|
}
|
|
}
|
|
if(zrbmList.isEmpty() && xdbmList.isEmpty()) return indexKpiDataDepart;
|
|
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 (timeType.equals("year")){
|
|
if (clYear.contains(indexKpiParamDto.getBeginDate())){
|
|
if (clYear.contains(indexKpiParamDto.getBeginDate())){
|
|
- // 查询 1到10月份的总合同额
|
|
|
|
|
|
+ // 责任部门 查询 1到10月份的总合同额
|
|
CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedZrbmClMapFuture = CompletableFuture.supplyAsync(() -> {
|
|
CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedZrbmClMapFuture = CompletableFuture.supplyAsync(() -> {
|
|
Map<String, IndexKpiCompletByDate> htereceivedZrbmClMap = new TreeMap<>();//用来保存部门该月合计的合同额、已收款以及责任部门
|
|
Map<String, IndexKpiCompletByDate> htereceivedZrbmClMap = new TreeMap<>();//用来保存部门该月合计的合同额、已收款以及责任部门
|
|
List<IndexKpiCompletByDate> zrbmHteCl = projectCostService.getZrbmHteCl(zrbmList);
|
|
List<IndexKpiCompletByDate> zrbmHteCl = projectCostService.getZrbmHteCl(zrbmList);
|
|
@@ -446,8 +454,8 @@ public class IndexKpiServiceImpl implements IndexKpiService {
|
|
}
|
|
}
|
|
return htereceivedZrbmClMap;
|
|
return htereceivedZrbmClMap;
|
|
});
|
|
});
|
|
- // 查询 10月份之后的总合同额 当前查询项目和成本表中的所有的 - 十月份的
|
|
|
|
- // 当期的合同额
|
|
|
|
|
|
+ // 责任部门 查询 10月份之后的总合同额 当前查询项目和成本表中的所有的 - 十月份的
|
|
|
|
+ // 责任部门 当期的合同额
|
|
CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedZrbmMapFuture = CompletableFuture.supplyAsync(() -> {
|
|
CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedZrbmMapFuture = CompletableFuture.supplyAsync(() -> {
|
|
TreeMap<String, IndexKpiCompletByDate> htereceivedZrbmMap = new TreeMap<>();
|
|
TreeMap<String, IndexKpiCompletByDate> htereceivedZrbmMap = new TreeMap<>();
|
|
List<IndexKpiCompletByDate> hteReceivedZrbmCost = indexKpiMapper.getHteReceivedZrbmCost(zrbmList);
|
|
List<IndexKpiCompletByDate> hteReceivedZrbmCost = indexKpiMapper.getHteReceivedZrbmCost(zrbmList);
|
|
@@ -456,7 +464,7 @@ public class IndexKpiServiceImpl implements IndexKpiService {
|
|
}
|
|
}
|
|
return htereceivedZrbmMap;
|
|
return htereceivedZrbmMap;
|
|
});
|
|
});
|
|
- // 10月份的合同额
|
|
|
|
|
|
+ // 责任部门 10月份的合同额
|
|
CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedZrbmLastMapFuture = CompletableFuture.supplyAsync(() -> {
|
|
CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedZrbmLastMapFuture = CompletableFuture.supplyAsync(() -> {
|
|
Map<String, IndexKpiCompletByDate> htereceivedZrbmLastMap = new TreeMap<>();//用来保存部门上月合计的合同额、已收款以及责任部门
|
|
Map<String, IndexKpiCompletByDate> htereceivedZrbmLastMap = new TreeMap<>();//用来保存部门上月合计的合同额、已收款以及责任部门
|
|
List<IndexKpiCompletByDate> htereceivedZrbmLastList = indexKpiMapper.getHteReceivedZrbmYm("2023-10", zrbmList);
|
|
List<IndexKpiCompletByDate> htereceivedZrbmLastList = indexKpiMapper.getHteReceivedZrbmYm("2023-10", zrbmList);
|
|
@@ -466,34 +474,86 @@ public class IndexKpiServiceImpl implements IndexKpiService {
|
|
return htereceivedZrbmLastMap;
|
|
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();
|
|
future.join();
|
|
Map<String, IndexKpiCompletByDate> htereceivedZrbmClMap = getHtereceivedZrbmClMapFuture.join();
|
|
Map<String, IndexKpiCompletByDate> htereceivedZrbmClMap = getHtereceivedZrbmClMapFuture.join();
|
|
Map<String, IndexKpiCompletByDate> htereceivedZrbmMap = getHtereceivedZrbmMapFuture.join();
|
|
Map<String, IndexKpiCompletByDate> htereceivedZrbmMap = getHtereceivedZrbmMapFuture.join();
|
|
Map<String, IndexKpiCompletByDate> htereceivedZrbmLastMap = getHtereceivedZrbmLastMapFuture.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.setZrbmCharts(kpiDataZrbmList);
|
|
|
|
+ indexKpiDataDepart.setJycsCharts(kpiDataJycsList);
|
|
return indexKpiDataDepart;
|
|
return indexKpiDataDepart;
|
|
}
|
|
}
|
|
}else if (timeType.equals("month")){
|
|
}else if (timeType.equals("month")){
|
|
@@ -508,19 +568,31 @@ public class IndexKpiServiceImpl implements IndexKpiService {
|
|
return htereceivedZrbmMap;
|
|
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();
|
|
future.join();
|
|
Map<String, IndexKpiCompletByDate> htereceivedZrbmMap = getHtereceivedZrbmMapFuture.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(() -> {
|
|
CompletableFuture<Void> setKpiDataZrbmList = CompletableFuture.runAsync(() -> {
|
|
for (IndexKpiCompletByDate kpiDataZrbm:kpiDataZrbmList) {
|
|
for (IndexKpiCompletByDate kpiDataZrbm:kpiDataZrbmList) {
|
|
@@ -542,9 +614,10 @@ public class IndexKpiServiceImpl implements IndexKpiService {
|
|
|
|
|
|
CompletableFuture<Void> setKpiDataXdbmList = CompletableFuture.runAsync(() -> {
|
|
CompletableFuture<Void> setKpiDataXdbmList = CompletableFuture.runAsync(() -> {
|
|
for (IndexKpiCompletByDate kpiDataXdbm:kpiDataJycsList) {
|
|
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() != null){
|
|
if(kpiDataXdbm.getDepartKpi().equals(BigDecimal.valueOf(0))){
|
|
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());
|
|
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(() -> {
|
|
CompletableFuture<Map<String, IndexKpiCompletByDate>> getHtereceivedZrbmMapFuture = CompletableFuture.supplyAsync(() -> {
|
|
@@ -596,38 +672,63 @@ public class IndexKpiServiceImpl implements IndexKpiService {
|
|
return htereceivedZrbmLastMap;
|
|
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();
|
|
future1.join();
|
|
Map<String, IndexKpiCompletByDate> htereceivedZrbmMap = getHtereceivedZrbmMapFuture.join();
|
|
Map<String, IndexKpiCompletByDate> htereceivedZrbmMap = getHtereceivedZrbmMapFuture.join();
|
|
Map<String, IndexKpiCompletByDate> htereceivedZrbmLastMap = getHtereceivedZrbmLastMapFuture.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(() -> {
|
|
CompletableFuture<Void> setKpiDataZrbmList = CompletableFuture.runAsync(() -> {
|
|
@@ -658,21 +759,34 @@ public class IndexKpiServiceImpl implements IndexKpiService {
|
|
CompletableFuture<Void> setKpiDataJycsList = CompletableFuture.runAsync(() -> {
|
|
CompletableFuture<Void> setKpiDataJycsList = CompletableFuture.runAsync(() -> {
|
|
//下达部门列表填充合同额、已收款、完成度
|
|
//下达部门列表填充合同额、已收款、完成度
|
|
for(IndexKpiCompletByDate kpiDataJycs:kpiDataJycsList){
|
|
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))){
|
|
if(kpiDataJycs.getDepartKpi().equals(BigDecimal.valueOf(0))){
|
|
kpiDataJycs.setKpiCompletRate(BigDecimal.valueOf(1));
|
|
kpiDataJycs.setKpiCompletRate(BigDecimal.valueOf(1));
|
|
}else{
|
|
}else{
|
|
kpiDataJycs.setKpiCompletRate(kpiDataJycs.getContractAmount().divide(kpiDataJycs.getDepartKpi(), 2, RoundingMode.HALF_UP));
|
|
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");
|
|
// System.out.println("kpiDataJycsList");
|
|
//下达部门指标完成度排序
|
|
//下达部门指标完成度排序
|