Commit b258d5b8 by zhangkb

对标省对市报表2代码

parent 25011298
...@@ -27,14 +27,19 @@ public class IndicatorsReportTwo { ...@@ -27,14 +27,19 @@ public class IndicatorsReportTwo {
private String currentActualAverage;//本期全省平均值 private String currentActualAverage;//本期全省平均值
private String sameActualAverage;//同期全省平均值 private String sameActualAverage;//同期全省平均值
private String averageRate;//全省平均分同比 private String averageRate;//全省平均分同比
private String trend;//全省平均分变化趋势 0:趋好 1:趋坏 private String trend;//指标变化趋势 0:趋好 1:趋坏
private String currentAverage;//本期实际平均值 private String currentAverage;//本期实际平均值
private String bestUnit;//标杆单位 private String bestUnit;//标杆单位
private String bestUnitDesc;//标杆单位描述
private String bestUnitValue;//标杆值 private String bestUnitValue;//标杆值
private Integer bestAverageUnits;//优于平均单位数 private Integer bestAverageUnits;//优于平均单位数
private Integer sameImproveUnits;//同比提升单位数 private Integer sameImproveUnits;//同比提升单位数
private String rankHeadThree;//排名前三 private String rankHeadThree;//排名前三
private String rankHeadThreeDesc;//排名前三描述
private String rankAfterThree;//排名末三 private String rankAfterThree;//排名末三
private String rankAfterThreeDesc;//排名末三描述
private String sameImproveHeadThree;//同比提升前三 private String sameImproveHeadThree;//同比提升前三
private String sameImproveHeadThreeDesc;//同比提升前三描述
private String sameImproveAfterThree;//同比提升末三 private String sameImproveAfterThree;//同比提升末三
private String sameImproveAfterThreeDesc;//同比提升末三描述
} }
package com.keymobile.indicators.service.report; package com.keymobile.indicators.service.report;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -77,21 +80,29 @@ public class IndicatorsReportService { ...@@ -77,21 +80,29 @@ public class IndicatorsReportService {
} }
} }
public void dealDriveIndReportTwoData(String compareUnitId,Integer date) { public void dealDriveIndReportTwoData(String compareUnitId,List<String> indIds,
List<String> compareObjs,Integer date) {
String type = this.getCompareType(date); String type = this.getCompareType(date);
List<DriveIndCalResultDef> calDatas = driveIndCalResultDefMapper.findByCompareIdAndDate( for(String indId : indIds) {
compareUnitId, date); Map<String,Object> paramMap = new HashMap<>();
for(DriveIndCalResultDef calData : calDatas) { paramMap.put("indId", indId);
//判断是否存在 paramMap.put("date", date);
IndicatorsReportTwo indReportData = reportTwoMapper.getDataByParam(calData.getIndId(), paramMap.put("compareObjs", compareObjs);
compareUnitId, date, type); List<DriveIndCalResultDef> calDatas = driveIndCalResultDefMapper
if(indReportData!=null) { .findByIndIdAndDateAndCompareObjIn(paramMap);
indReportData = new IndicatorsReportTwo(); if(!calDatas.isEmpty()) {
//判断是否存在
IndicatorsReportTwo indReportData = reportTwoMapper.getDataByParam(indId,
compareUnitId, date, type);
if(indReportData!=null) {
indReportData = new IndicatorsReportTwo();
}
indReportData.setCompareType(type);
indReportData.setCompareUnitId(compareUnitId);
indReportData.setCompareDate(date);
this.saveOrUpdateReportTwo(indReportData);
} }
indReportData.setCompareType(type);
indReportData.setUnit(calData.getUnit());
//TODO:
this.saveOrUpdateReportTwo(indReportData);
} }
} }
...@@ -164,6 +175,129 @@ public class IndicatorsReportService { ...@@ -164,6 +175,129 @@ public class IndicatorsReportService {
return "deal indicators report one success"; return "deal indicators report one success";
} }
public IndicatorsReportTwo fillDriveIndiReportTwoData(String indId,List<DriveIndCalResultDef> calDatas,
IndicatorsReportTwo indReportData,Integer date,List<String> compareObjs) {
String average = null;//定义存储指标组内平均值
//根据指标id获取指标详情
DriveIndDef driveIndDef = driveIndDefMapper.selectByPrimaryKey(indId);
if(driveIndDef!=null) {
indReportData.setIndId(driveIndDef.getIndId());
indReportData.setIndName(driveIndDef.getIndName());
indReportData.setUnit(driveIndDef.getIndUnit());
}
//取出一项获取平均值
if(!calDatas.isEmpty()) {
indReportData.setCurrentActualAverage(calDatas.get(0).getActualAverage());
//查找同期对标结果
DriveIndCalResultDef sameCalData = driveIndCalResultDefMapper.findByIndIdAndDateAndCompareObj(
indId, (date-100), calDatas.get(0).getCompareObj());
if(sameCalData!=null) {
indReportData.setSameActualAverage(sameCalData.getActualAverage());
//获取指标正反向类型
String indRule = null;
if(driveIndDef!=null) {
indRule = driveIndDef.getIndRule();
}
//算平均分同比
String averageRate = CalculateUtils.calGowth(calDatas.get(0).getActualAverage(),
sameCalData.getActualAverage(), indRule);
indReportData.setAverageRate(averageRate);
//计算变化趋势
if(StringUtils.isNotBlank(averageRate)) {
if("1".equals(indRule)) {//反向
if(Double.parseDouble(calDatas.get(0).getActualAverage())>
Double.parseDouble(sameCalData.getActualAverage())) {
indReportData.setTrend("1");//趋差
}else {
indReportData.setTrend("0");
}
}else {//其他当正向处理
if(Double.parseDouble(calDatas.get(0).getActualAverage())>
Double.parseDouble(sameCalData.getActualAverage())) {
indReportData.setTrend("0");//趋好
}else {
indReportData.setTrend("1");
}
}
}
}
//填充本期实际平均值
if(calDatas.get(0).getActualAverage()!=null &&
!"0.0".equals(calDatas.get(0).getActualAverage())) {
average = calDatas.get(0).getActualAverage();
}else {
average = calDatas.get(0).getAverage();
}
indReportData.setAverageRate(average);
}
if(!calDatas.isEmpty()) {
//标杆单位
indReportData.setBestUnit(calDatas.get(0).getCompareObj());
indReportData.setBestUnitDesc(calDatas.get(0).getCompareObjDesc());
//标杆值
indReportData.setBestUnitValue(calDatas.get(0).getValue());
//优于平均数单位数
if(StringUtils.isNotBlank(average)) {
indReportData.setBestAverageUnits(this.bestAverageUnits(average, calDatas));
}
//同比提升单位
Map<String,Object> sameImproveResult = this.sameImproveUnits(indId, date, compareObjs,
calDatas);
indReportData.setSameImproveUnits(Integer.parseInt(sameImproveResult.get("improveNum").toString()));
}
return indReportData;
}
//同比提升单位数
private Map<String,Object> sameImproveUnits(String indId,Integer date,List<String> compareObjs,
List<DriveIndCalResultDef> currentCalDatas) {
Map<String,Object> result = new HashMap<>();
Integer improveNum = 0;//单位提升数
Map<String,Integer> resultRank = new HashMap<>();
//查找同期考核结果
Map<String,Object> paramMap = new HashMap<>();
paramMap.put("indId", indId);
paramMap.put("date", (date-100));
paramMap.put("compareObjs", compareObjs);
List<DriveIndCalResultDef> sameCalDatas = driveIndCalResultDefMapper
.findByIndIdAndDateAndCompareObjIn(paramMap);
if(!sameCalDatas.isEmpty()) {
Map<String,String> rankMap = new HashMap<>();
for(DriveIndCalResultDef currentCalData : currentCalDatas) {
for(DriveIndCalResultDef sameCalData : sameCalDatas) {
if(sameCalData.getCompareObj().equals(currentCalData.getCompareObj())
&& !"NaN".equals(sameCalData.getValue()) && !"NaN".equals(currentCalData.getValue())) {
rankMap.put(currentCalData.getCompareObj(),
String.valueOf((currentCalData.getRank()-sameCalData.getRank())));
if((currentCalData.getRank()-sameCalData.getRank())>0) {
improveNum+=1;
}
break;
}
}
}
resultRank = CalculateUtils.rankValue(rankMap, "0");
}
result.put("improveNum", improveNum);
result.put("resultRank", resultRank);
return result;
}
//统计优于平均数量
private Integer bestAverageUnits(String average,List<DriveIndCalResultDef> calDatas) {
Integer result = 0;
for(DriveIndCalResultDef calData : calDatas) {
if(StringUtils.isNotBlank(calData.getValue()) && !"NaN".equals(calData.getValue())
&& !"Infinite".equals(calData.getValue())) {
if(Double.parseDouble(calData.getValue())>Double.parseDouble(average)) {
result+=1;
}
}
}
return result;
}
public IndicatorsReportOne fillBaseIndiReportOneData(IndicatorsData indiData, public IndicatorsReportOne fillBaseIndiReportOneData(IndicatorsData indiData,
IndicatorsReportOne indReportData) { IndicatorsReportOne indReportData) {
indReportData.setIndId(indiData.getIndId()); indReportData.setIndId(indiData.getIndId());
...@@ -213,8 +347,12 @@ public class IndicatorsReportService { ...@@ -213,8 +347,12 @@ public class IndicatorsReportService {
indReportData.setLastSameScore(sameCalData.getScore()); indReportData.setLastSameScore(sameCalData.getScore());
indReportData.setLastSameImprove(sameCalData.getImproveScore()); indReportData.setLastSameImprove(sameCalData.getImproveScore());
//算同比 //算同比
String growCalType = "1";
if(driveIndDef!=null && StringUtils.isNotBlank(driveIndDef.getGrowCalType())) {
growCalType = driveIndDef.getGrowCalType();
}
String calGowth = CalculateUtils.calGowth(calData.getValue(), sameCalData.getValue(), String calGowth = CalculateUtils.calGowth(calData.getValue(), sameCalData.getValue(),
driveIndDef.getGrowCalType()); growCalType);
indReportData.setValueRate(calGowth); indReportData.setValueRate(calGowth);
} }
return indReportData; return indReportData;
......
...@@ -34,8 +34,8 @@ public class CalculateUtils { ...@@ -34,8 +34,8 @@ public class CalculateUtils {
public static String calGowth(String currentValue,String sameValue,String type) { public static String calGowth(String currentValue,String sameValue,String type) {
String gowthValue = ""; String gowthValue = "";
StringBuilder formula = new StringBuilder(); StringBuilder formula = new StringBuilder();
if(!"NaN".equals(currentValue) && !"Infinite".equals(currentValue) if(!"NaN".equals(currentValue) && !"Infinite".equals(currentValue) && StringUtils.isNotBlank(currentValue)
&& !"NaN".equals(sameValue) && !"Infinite".equals(sameValue)) { && !"NaN".equals(sameValue) && !"Infinite".equals(sameValue) && StringUtils.isNotBlank(sameValue)) {
Object value = null; Object value = null;
if("0".equals(type)) { if("0".equals(type)) {
formula.append(currentValue).append("-").append(sameValue); formula.append(currentValue).append("-").append(sameValue);
...@@ -64,7 +64,7 @@ public class CalculateUtils { ...@@ -64,7 +64,7 @@ public class CalculateUtils {
//将map中的无效值挑出来 //将map中的无效值挑出来
for(Entry<String,String> entry : valueMap.entrySet()) { for(Entry<String,String> entry : valueMap.entrySet()) {
if("NaN".equals(entry.getValue())|| "Infinite".equals(entry.getValue()) if("NaN".equals(entry.getValue())|| "Infinite".equals(entry.getValue())
|| "0.0000".equals(entry.getValue()) || "0".equals(entry.getValue()) || "0.0000".equals(entry.getValue()) /*|| "0".equals(entry.getValue())*/
|| "".equals(entry.getValue())) { || "".equals(entry.getValue())) {
invalidMap.put(entry.getKey(),entry.getValue()); invalidMap.put(entry.getKey(),entry.getValue());
}else { }else {
...@@ -229,29 +229,29 @@ public class CalculateUtils { ...@@ -229,29 +229,29 @@ 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", "NaN"); map.put("1001", "12");
// map.put("1002", "NaN"); map.put("1002", "-1");
// map.put("1003", "NaN"); map.put("1003", "-4");
// map.put("1004", "NaN"); map.put("1004", "3");
// map.put("1005", "NaN"); map.put("1005", "5");
// map.put("1006", "NaN"); map.put("1006", "7");
// map.put("1007", "NaN"); map.put("1007", "0");
// map.put("1008", "NaN"); map.put("1008", "-6");
CalculateUtils cal = new CalculateUtils(); CalculateUtils cal = new CalculateUtils();
// Map<String,Integer> result = cal.rankValue(map, "1"); Map<String,Integer> result = cal.rankValue(map, "0");
// System.out.println(result); 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<>();
map.put("1001", "3"); // map.put("1001", "3");
map.put("1002", "5"); // map.put("1002", "5");
formula = formula.replace("[1001]", "3"); // formula = formula.replace("[1001]", "3");
formula = formula.replace("[1002]", "5"); // formula = formula.replace("[1002]", "5");
String result1 = AviatorEvaluator.execute(formula).toString(); // String result1 = AviatorEvaluator.execute(formula).toString();
String result2 = cal.calculateFormula(formula, map); // String result2 = cal.calculateFormula(formula, map);
System.out.println(result1); // System.out.println(result1);
System.out.println(result2); // System.out.println(result2);
// Double b = (double) Math.abs(34-50); // Double b = (double) Math.abs(34-50);
// System.out.println(b); // System.out.println(b);
// List<String> listA = new ArrayList<>(); // List<String> listA = new ArrayList<>();
......
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