|
@@ -13,6 +13,7 @@ import org.jeecg.modules.Index.service.IndexKpiService;
|
|
|
import org.jeecg.modules.Index.util.AuthMark;
|
|
|
import org.jeecg.modules.Index.util.CommonMethod;
|
|
|
import org.jeecg.modules.dataSourceSwitch.annotation.TargetDataSource;
|
|
|
+import org.jeecg.modules.projectCost.service.IProjectCostService;
|
|
|
import org.jeecg.modules.system.service.ISysDepartService;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
@@ -52,6 +53,10 @@ public class IndexKpiServiceImpl implements IndexKpiService {
|
|
|
@SuppressWarnings("all")
|
|
|
private ISysDepartService sysDepartService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ @SuppressWarnings("all")
|
|
|
+ private IProjectCostService projectCostService;
|
|
|
+
|
|
|
/**
|
|
|
* 工具类
|
|
|
* 根据日期字符串求上一个月的字符串
|
|
@@ -327,6 +332,20 @@ public class IndexKpiServiceImpl implements IndexKpiService {
|
|
|
List<IndexKpiCompletByDate> kpiDataJycsList = new ArrayList<>();//下达部门排行
|
|
|
indexKpiDataDepart.setZrbmCharts(kpiDataZrbmList);//初始化放入空列表
|
|
|
indexKpiDataDepart.setJycsCharts(kpiDataJycsList);
|
|
|
+
|
|
|
+ ArrayList<String> clYearMonth = new ArrayList<>();
|
|
|
+ clYearMonth.add("2023-01");
|
|
|
+ clYearMonth.add("2023-02");
|
|
|
+ clYearMonth.add("2023-03");
|
|
|
+ clYearMonth.add("2023-04");
|
|
|
+ clYearMonth.add("2023-05");
|
|
|
+ clYearMonth.add("2023-06");
|
|
|
+ clYearMonth.add("2023-07");
|
|
|
+ clYearMonth.add("2023-08");
|
|
|
+ clYearMonth.add("2023-09");
|
|
|
+ clYearMonth.add("2023-10");
|
|
|
+ ArrayList<String> clYear = new ArrayList<>();
|
|
|
+ clYear.add("2023");
|
|
|
// TODO: 初始化结束
|
|
|
|
|
|
//判断用户权限
|
|
@@ -416,6 +435,140 @@ public class IndexKpiServiceImpl implements IndexKpiService {
|
|
|
}
|
|
|
if(zrbmList.isEmpty() && xdbmList.isEmpty()) return indexKpiDataDepart;
|
|
|
|
|
|
+ if (timeType.equals("year")){
|
|
|
+ if (clYear.contains(indexKpiParamDto.getBeginDate())){
|
|
|
+ // 查询 1到10月份的总合同额
|
|
|
+ CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedZrbmClMapFuture = CompletableFuture.supplyAsync(() -> {
|
|
|
+ Map<String, IndexKpiCompletByDate> htereceivedZrbmClMap = new TreeMap<>();//用来保存部门该月合计的合同额、已收款以及责任部门
|
|
|
+ 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<>();
|
|
|
+ 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<>();//用来保存部门上月合计的合同额、已收款以及责任部门
|
|
|
+ List<IndexKpiCompletByDate> htereceivedZrbmLastList = indexKpiMapper.getHteReceivedZrbmYm("2023-10", zrbmList);
|
|
|
+ for(IndexKpiCompletByDate htereceivedZrbmLast:htereceivedZrbmLastList){
|
|
|
+ htereceivedZrbmLastMap.put(htereceivedZrbmLast.getDepart(), htereceivedZrbmLast);
|
|
|
+ }
|
|
|
+ return htereceivedZrbmLastMap;
|
|
|
+ });
|
|
|
+
|
|
|
+ CompletableFuture<Void> future = CompletableFuture.allOf(getHtereceivedZrbmClMapFuture, getHtereceivedZrbmMapFuture, getHtereceivedZrbmLastMapFuture);
|
|
|
+ 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));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //责任部门 根据指标进行排序
|
|
|
+ kpiDataZrbmList.sort(Comparator.comparing(IndexKpiCompletByDate::getKpiCompletRate, Comparator.nullsFirst(BigDecimal::compareTo)).reversed());
|
|
|
+ indexKpiDataDepart.setZrbmCharts(kpiDataZrbmList);
|
|
|
+ return indexKpiDataDepart;
|
|
|
+ }
|
|
|
+ }else if (timeType.equals("month")){
|
|
|
+ if (clYearMonth.contains(finalDateYm)){
|
|
|
+ // 责任 部门
|
|
|
+ CompletableFuture<Map<String,IndexKpiCompletByDate>> getHtereceivedZrbmMapFuture = CompletableFuture.supplyAsync(() -> {
|
|
|
+ Map<String, IndexKpiCompletByDate> htereceivedZrbmMap = new TreeMap<>();//用来保存部门该月合计的合同额、已收款以及责任部门
|
|
|
+ List<IndexKpiCompletByDate> zrbmIndexKpiComplet = projectCostService.getZrbmHte(indexKpiParamDto.getBeginDate(), zrbmList);
|
|
|
+ for (IndexKpiCompletByDate htereceivedZrbm : zrbmIndexKpiComplet){
|
|
|
+ htereceivedZrbmMap.put(htereceivedZrbm.getDepart(), htereceivedZrbm);
|
|
|
+ }
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ return htereceivedXdbmMap;
|
|
|
+ });
|
|
|
+ CompletableFuture<Void> future = CompletableFuture.allOf(getHtereceivedZrbmMapFuture,getHtereceivedXdbmMapFuture);
|
|
|
+ future.join();
|
|
|
+ Map<String, IndexKpiCompletByDate> htereceivedZrbmMap = getHtereceivedZrbmMapFuture.join();
|
|
|
+ Map<String, IndexKpiCompletByDate> htereceivedXdbmMap = getHtereceivedXdbmMapFuture.join();
|
|
|
+
|
|
|
+ CompletableFuture<Void> setKpiDataZrbmList = CompletableFuture.runAsync(() -> {
|
|
|
+ for (IndexKpiCompletByDate kpiDataZrbm:kpiDataZrbmList) {
|
|
|
+ IndexKpiCompletByDate htereceivedZrbm = htereceivedZrbmMap.getOrDefault(kpiDataZrbm.getDepart(), kpiDataZrbm);
|
|
|
+ kpiDataZrbm.setContractAmount(htereceivedZrbm.getContractAmount()); // 合同额
|
|
|
+ kpiDataZrbm.setReceived(htereceivedZrbm.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 htereceivedXdbm = htereceivedXdbmMap.getOrDefault(kpiDataXdbm.getDepart(), kpiDataXdbm);
|
|
|
+ kpiDataXdbm.setContractAmount(htereceivedXdbm.getContractAmount()); // 合同额
|
|
|
+ kpiDataXdbm.setReceived(htereceivedXdbm.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;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
//责任部门 获取选择年月的数据 合同额、已收款
|
|
|
CompletableFuture<Map<String, IndexKpiCompletByDate>> getHtereceivedZrbmMapFuture = CompletableFuture.supplyAsync(() -> {
|
|
|
Map<String, IndexKpiCompletByDate> htereceivedZrbmMap = new TreeMap<>();//用来保存部门该月合计的合同额、已收款以及责任部门
|
|
@@ -476,6 +629,7 @@ public class IndexKpiServiceImpl implements IndexKpiService {
|
|
|
Map<String, IndexKpiCompletByDate> htereceivedJycsMap = getHtereceivedJycsMapFuture.join();
|
|
|
Map<String, IndexKpiCompletByDate> htereceivedJycsLastMap = getHtereceivedJycsLastMapFuture.join();
|
|
|
|
|
|
+ // 责任部门 完成度
|
|
|
CompletableFuture<Void> setKpiDataZrbmList = CompletableFuture.runAsync(() -> {
|
|
|
//责任部门列表填充合同额、已收款、完成度
|
|
|
for(IndexKpiCompletByDate kpiDataZrbm:kpiDataZrbmList){
|
|
@@ -499,13 +653,16 @@ public class IndexKpiServiceImpl implements IndexKpiService {
|
|
|
kpiDataZrbmList.sort(Comparator.comparing(IndexKpiCompletByDate::getKpiCompletRate, Comparator.nullsFirst(BigDecimal::compareTo)).reversed());
|
|
|
// System.out.println(kpiDataZrbmList);
|
|
|
});
|
|
|
+
|
|
|
+ //下达部门 完成度
|
|
|
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().subtract(htereceivedJycsLast.getContractAmount()).setScale(2, RoundingMode.HALF_UP));//合同额
|
|
|
+ kpiDataJycs.setContractAmount(htereceivedJycs.getContractAmount());//合同额
|
|
|
kpiDataJycs.setReceived(htereceivedJycs.getReceived().subtract(htereceivedJycsLast.getReceived()).setScale(2, RoundingMode.HALF_UP));//已收款
|
|
|
|
|
|
//计算完成度 合同额(是计算的某个月或某个年的合同额 增量)/ 指标
|