Commit 3d306a4d by zhangkb

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

parent 9f95096e
......@@ -2,6 +2,7 @@ package com.keymobile.indicators.service.report;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
......@@ -195,8 +196,17 @@ public class IndicatorsReportService {
return "deal indicators report one success";
}
@SuppressWarnings("unchecked")
public IndicatorsReportTwo fillDriveIndiReportTwoData(String indId,List<DriveIndCalResultDef> calDatas,
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;//定义存储指标组内平均值
//根据指标id获取指标详情
DriveIndDef driveIndDef = driveIndDefMapper.selectByPrimaryKey(indId);
......@@ -278,6 +288,11 @@ public class IndicatorsReportService {
int start = 0;
int end = 3;
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()) {
StringBuilder sameImproveHeadThree = new StringBuilder("");//同比提升前三
StringBuilder sameImproveHeadThreeDesc = new StringBuilder("");
......@@ -296,6 +311,11 @@ public class IndicatorsReportService {
StringBuilder sameImproveAfterThree = new StringBuilder("");//同比提升前三
StringBuilder sameImproveAfterThreeDesc = new StringBuilder("");//
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()) {
sameImproveAfterThree.append(entry.getKey()).append(";");
sameImproveAfterThreeDesc.append(compareObjMapper.get(entry.getKey())).append(";");
......@@ -311,9 +331,18 @@ public class IndicatorsReportService {
start = 0;
StringBuilder rankHeadThree = new StringBuilder("");
StringBuilder rankHeadThreeDesc = new StringBuilder("");
Map<String,Integer> rankMap = new LinkedHashMap<>();
Map<String,String> objDescMap = new HashMap<>();
for(DriveIndCalResultDef calData : calDatas) {
rankHeadThree.append(calData.getCompareObj()).append(";");
rankHeadThreeDesc.append(calData.getCompareObjDesc()).append(";");
rankMap.put(calData.getCompareObj(), calData.getRank());
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;
if(start>=end) {
break;
......@@ -321,7 +350,9 @@ public class IndicatorsReportService {
}
indReportData.setRankHeadThree(rankHeadThree.toString());
indReportData.setRankHeadThreeDesc(rankHeadThreeDesc.toString());
//排名莫三
rankMap.clear();
//排名末三
start = 0;
StringBuilder rankAfterThree = new StringBuilder("");
StringBuilder rankAfterThreeDesc = new StringBuilder("");
......@@ -330,8 +361,15 @@ public class IndicatorsReportService {
"Infinite".equals(calDatas.get(i).getValue())) {
continue;
}
rankAfterThree.append(calDatas.get(i).getCompareObj()).append(";");
rankAfterThreeDesc.append(calDatas.get(i).getCompareObjDesc()).append(";");
rankMap.put(calDatas.get(i).getCompareObj(), calDatas.get(i).getRank());
}
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;
if(start>=end) {
break;
......
......@@ -187,6 +187,65 @@ public class CalculateUtils {
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) -> {
if (o1.getValue() instanceof Comparable) {
return ((Comparable) o1.getValue()).compareTo(o2.getValue());
......@@ -267,19 +326,20 @@ public class CalculateUtils {
}
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
map.put("1001", "12");
map.put("1002", "-1");
map.put("1003", "-4");
map.put("1004", "3");
map.put("1005", "5");
map.put("1006", "7");
map.put("1007", "0");
map.put("1008", "-6");
// Map<String,String> map = new HashMap<>();
// map.put("1001", "12");
// map.put("1002", "-1");
// map.put("1003", "-4");
// map.put("1004", "3");
// map.put("1005", "5");
// map.put("1006", "7");
// map.put("1007", "0");
// map.put("1008", "-6");
CalculateUtils cal = new CalculateUtils();
Map<String,Integer> result = cal.rankValue(map, "0");
result = cal.sortMapByValue(result,1);
System.out.println(result);
cal.rankByObjSort(new HashMap<String,Integer>(), new HashMap<String,Integer>());
// Map<String,Integer> result = cal.rankValue(map, "0");
// result = cal.sortMapByValue(result,1);
// System.out.println(result);
//
// String formula = "([1001]+[1002])/2";
// 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