Commit 3d306a4d by zhangkb

修改报表2获取排名前三末三单位逻辑

parent 9f95096e
...@@ -2,6 +2,7 @@ package com.keymobile.indicators.service.report; ...@@ -2,6 +2,7 @@ package com.keymobile.indicators.service.report;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -195,8 +196,17 @@ public class IndicatorsReportService { ...@@ -195,8 +196,17 @@ public class IndicatorsReportService {
return "deal indicators report one success"; return "deal indicators report one success";
} }
@SuppressWarnings("unchecked")
public IndicatorsReportTwo fillDriveIndiReportTwoData(String indId,List<DriveIndCalResultDef> calDatas, public IndicatorsReportTwo fillDriveIndiReportTwoData(String indId,List<DriveIndCalResultDef> calDatas,
IndicatorsReportTwo indReportData,Integer date,List<String> compareObjs) { IndicatorsReportTwo indReportData,Integer date,List<String> compareObjs) {
//针对省对市对标获取前三末三地区顺序
Map<String,Integer> objSort = new HashMap<>();
objSort.put("4301",1);objSort.put("4302",2);objSort.put("4303",3);
objSort.put("4304",4);objSort.put("4305",5);objSort.put("4306",6);
objSort.put("4307",7);objSort.put("4308",8);objSort.put("4309",9);
objSort.put("4310",10);objSort.put("4311",11);objSort.put("4312",12);
objSort.put("4313",13);objSort.put("4331",14);
String average = null;//定义存储指标组内平均值 String average = null;//定义存储指标组内平均值
//根据指标id获取指标详情 //根据指标id获取指标详情
DriveIndDef driveIndDef = driveIndDefMapper.selectByPrimaryKey(indId); DriveIndDef driveIndDef = driveIndDefMapper.selectByPrimaryKey(indId);
...@@ -278,6 +288,11 @@ public class IndicatorsReportService { ...@@ -278,6 +288,11 @@ public class IndicatorsReportService {
int start = 0; int start = 0;
int end = 3; int end = 3;
Map<String,Integer> resultRank = (Map<String,Integer>)sameImproveResult.get("resultRank"); Map<String,Integer> resultRank = (Map<String,Integer>)sameImproveResult.get("resultRank");
//根据省对市地区顺序排列排名并列的情况
Map<String,Object> objSortRank = CalculateUtils.rankByObjSort(resultRank, objSort);
resultRank = (Map<String,Integer>)objSortRank.get("rankMap");
end = Integer.parseInt(objSortRank.get("rankNum").toString());
if(!resultRank.isEmpty()) { if(!resultRank.isEmpty()) {
StringBuilder sameImproveHeadThree = new StringBuilder("");//同比提升前三 StringBuilder sameImproveHeadThree = new StringBuilder("");//同比提升前三
StringBuilder sameImproveHeadThreeDesc = new StringBuilder(""); StringBuilder sameImproveHeadThreeDesc = new StringBuilder("");
...@@ -296,6 +311,11 @@ public class IndicatorsReportService { ...@@ -296,6 +311,11 @@ public class IndicatorsReportService {
StringBuilder sameImproveAfterThree = new StringBuilder("");//同比提升前三 StringBuilder sameImproveAfterThree = new StringBuilder("");//同比提升前三
StringBuilder sameImproveAfterThreeDesc = new StringBuilder("");// StringBuilder sameImproveAfterThreeDesc = new StringBuilder("");//
resultRank = CalculateUtils.sortMapByValue(resultRank,1);//按照value从大到小排序 resultRank = CalculateUtils.sortMapByValue(resultRank,1);//按照value从大到小排序
//根据省对市地区顺序排列排名并列的情况
objSortRank = CalculateUtils.rankByObjSort(resultRank, objSort);
resultRank = (Map<String,Integer>)objSortRank.get("rankMap");
end = Integer.parseInt(objSortRank.get("rankNum").toString());
for(Map.Entry<String,Integer> entry : resultRank.entrySet()) { for(Map.Entry<String,Integer> entry : resultRank.entrySet()) {
sameImproveAfterThree.append(entry.getKey()).append(";"); sameImproveAfterThree.append(entry.getKey()).append(";");
sameImproveAfterThreeDesc.append(compareObjMapper.get(entry.getKey())).append(";"); sameImproveAfterThreeDesc.append(compareObjMapper.get(entry.getKey())).append(";");
...@@ -311,9 +331,18 @@ public class IndicatorsReportService { ...@@ -311,9 +331,18 @@ public class IndicatorsReportService {
start = 0; start = 0;
StringBuilder rankHeadThree = new StringBuilder(""); StringBuilder rankHeadThree = new StringBuilder("");
StringBuilder rankHeadThreeDesc = new StringBuilder(""); StringBuilder rankHeadThreeDesc = new StringBuilder("");
Map<String,Integer> rankMap = new LinkedHashMap<>();
Map<String,String> objDescMap = new HashMap<>();
for(DriveIndCalResultDef calData : calDatas) { for(DriveIndCalResultDef calData : calDatas) {
rankHeadThree.append(calData.getCompareObj()).append(";"); rankMap.put(calData.getCompareObj(), calData.getRank());
rankHeadThreeDesc.append(calData.getCompareObjDesc()).append(";"); objDescMap.put(calData.getCompareObj(), calData.getCompareObjDesc());
}
Map<String,Object> resultRankMap = CalculateUtils.rankByObjSort(rankMap, objSort);
rankMap = (Map<String,Integer>)resultRankMap.get("rankMap");
end = Integer.parseInt(resultRankMap.get("rankNum").toString());
for(Map.Entry<String,Integer> entry : rankMap.entrySet()) {
rankHeadThree.append(entry.getKey()).append(";");
rankHeadThreeDesc.append(objDescMap.get(entry.getKey())).append(";");
start += 1; start += 1;
if(start>=end) { if(start>=end) {
break; break;
...@@ -321,7 +350,9 @@ public class IndicatorsReportService { ...@@ -321,7 +350,9 @@ public class IndicatorsReportService {
} }
indReportData.setRankHeadThree(rankHeadThree.toString()); indReportData.setRankHeadThree(rankHeadThree.toString());
indReportData.setRankHeadThreeDesc(rankHeadThreeDesc.toString()); indReportData.setRankHeadThreeDesc(rankHeadThreeDesc.toString());
//排名莫三
rankMap.clear();
//排名末三
start = 0; start = 0;
StringBuilder rankAfterThree = new StringBuilder(""); StringBuilder rankAfterThree = new StringBuilder("");
StringBuilder rankAfterThreeDesc = new StringBuilder(""); StringBuilder rankAfterThreeDesc = new StringBuilder("");
...@@ -330,8 +361,15 @@ public class IndicatorsReportService { ...@@ -330,8 +361,15 @@ public class IndicatorsReportService {
"Infinite".equals(calDatas.get(i).getValue())) { "Infinite".equals(calDatas.get(i).getValue())) {
continue; continue;
} }
rankAfterThree.append(calDatas.get(i).getCompareObj()).append(";"); rankMap.put(calDatas.get(i).getCompareObj(), calDatas.get(i).getRank());
rankAfterThreeDesc.append(calDatas.get(i).getCompareObjDesc()).append(";"); }
rankMap = CalculateUtils.sortMapByValue(rankMap,1);//按照value从大到小排序
resultRankMap = CalculateUtils.rankByObjSort(rankMap, objSort);
rankMap = (Map<String,Integer>)resultRankMap.get("rankMap");
end = Integer.parseInt(resultRankMap.get("rankNum").toString());
for(Map.Entry<String,Integer> entry : rankMap.entrySet()) {
rankAfterThree.append(entry.getKey()).append(";");
rankAfterThreeDesc.append(objDescMap.get(entry.getKey())).append(";");
start += 1; start += 1;
if(start>=end) { if(start>=end) {
break; break;
......
...@@ -187,6 +187,65 @@ public class CalculateUtils { ...@@ -187,6 +187,65 @@ public class CalculateUtils {
return calValue; return calValue;
} }
//根据地区特定顺序处理并列排名情况
public static Map<String,Object> rankByObjSort(Map<String,Integer> rankMap,Map<String,Integer> objSort){
Map<String,Object> result = new HashMap<>();
//排名分类
Map<Integer,List<String>> rankClassifyMap = new HashMap<>();
int rankNum = 3;
for(Map.Entry<String, Integer> map : rankMap.entrySet()) {
if(objSort.get(map.getKey())==null) {
rankClassifyMap.clear();
break;
}
List<String> rankClassifyList = new ArrayList<>();
if(rankClassifyMap.get(map.getValue())!=null) {
rankClassifyList.addAll(rankClassifyMap.get(map.getValue()));
}
rankClassifyList.add(map.getKey());
rankClassifyMap.put(map.getValue(), rankClassifyList);
}
if(!rankClassifyMap.isEmpty()) {
if(rankClassifyMap.get(1)!=null) {
if(rankClassifyMap.get(1).size()>3) {
rankNum = rankClassifyMap.get(1).size();
}
}
}
Map<String,Integer> resultRankMap = new LinkedHashMap<>();
for(Map.Entry<Integer,List<String>> map : rankClassifyMap.entrySet()) {
if(map.getValue().size()==1) {
resultRankMap.put(map.getValue().get(0), map.getKey());
continue;
}
List<String> rankClassifyList = map.getValue();
Map<String,Integer> objRankMap = new HashMap<>();
for(String obj : rankClassifyList) {
if(objSort.get(obj)!=null) {
objRankMap.put(obj, objSort.get(obj));
}else {
objRankMap.clear();
break;
}
}
if(!objRankMap.isEmpty()) {
//地区从小到大排序
objRankMap = sortByValueAsc(objRankMap);
for(Map.Entry<String,Integer> obj : objRankMap.entrySet()) {
resultRankMap.put(obj.getKey(), map.getKey());
}
}
}
result.put("rankNum", rankNum);
if(!resultRankMap.isEmpty()) {
result.put("rankMap",resultRankMap);
}else {
result.put("rankMap", rankMap);
}
System.out.println(result);
return result;
}
private static Comparator<Map.Entry> comparatorByValueAsc = (Map.Entry o1, Map.Entry o2) -> { private static Comparator<Map.Entry> comparatorByValueAsc = (Map.Entry o1, Map.Entry o2) -> {
if (o1.getValue() instanceof Comparable) { if (o1.getValue() instanceof Comparable) {
return ((Comparable) o1.getValue()).compareTo(o2.getValue()); return ((Comparable) o1.getValue()).compareTo(o2.getValue());
...@@ -267,19 +326,20 @@ public class CalculateUtils { ...@@ -267,19 +326,20 @@ public class CalculateUtils {
} }
public static void main(String[] args) { public static void main(String[] args) {
Map<String,String> map = new HashMap<>(); // Map<String,String> map = new HashMap<>();
map.put("1001", "12"); // map.put("1001", "12");
map.put("1002", "-1"); // map.put("1002", "-1");
map.put("1003", "-4"); // map.put("1003", "-4");
map.put("1004", "3"); // map.put("1004", "3");
map.put("1005", "5"); // map.put("1005", "5");
map.put("1006", "7"); // map.put("1006", "7");
map.put("1007", "0"); // map.put("1007", "0");
map.put("1008", "-6"); // map.put("1008", "-6");
CalculateUtils cal = new CalculateUtils(); CalculateUtils cal = new CalculateUtils();
Map<String,Integer> result = cal.rankValue(map, "0"); cal.rankByObjSort(new HashMap<String,Integer>(), new HashMap<String,Integer>());
result = cal.sortMapByValue(result,1); // Map<String,Integer> result = cal.rankValue(map, "0");
System.out.println(result); // result = cal.sortMapByValue(result,1);
// System.out.println(result);
// //
// String formula = "([1001]+[1002])/2"; // String formula = "([1001]+[1002])/2";
// Map<String,String> map = new HashMap<>(); // Map<String,String> map = new HashMap<>();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment