Commit e04a722c by zhangkb

修改指标值排名逻辑

parent f9b26cf3
...@@ -154,107 +154,113 @@ public class DriveIndIdObjCalActor extends AbstractActor{ ...@@ -154,107 +154,113 @@ public class DriveIndIdObjCalActor extends AbstractActor{
logger.info(baseIndValueMsg.getConfirmMessage()); logger.info(baseIndValueMsg.getConfirmMessage());
} }
String indValue = baseIndValueMsg.getValue(); String indValue = baseIndValueMsg.getValue();
//如果指标值返回空值,那么就不进行下面的计算了,直接返回给父actor
if(StringUtils.isBlank(indValue)) { if(StringUtils.isBlank(indValue)) {
indValue="0.0"; CalIndAverageAndRankMsg driveIndAverageAndRankMsg =
} new CalIndAverageAndRankMsg(-1,
try { compareId,driveIndId,compareObj,date,"NaN",
driveIndFormula = driveIndFormula.replace("["+baseIndValueMsg.getIndId()+"]", unit,indType,scoreCardId,averageDriveIndFormula,compCalLogId);
indValue); driveIndIdCalActor.tell(driveIndAverageAndRankMsg,ActorRef.noSender());
//替换公式中的基础指标id为确定指标值 }else {
//env.put(baseIndValueMsg.getIndId(), Double.valueOf(indValue)); try {
}catch(Exception e) { driveIndFormula = driveIndFormula.replace("["+baseIndValueMsg.getIndId()+"]",
e.printStackTrace(); indValue);
logger.error("driveIndId:"+driveIndId+";"+ //替换公式中的基础指标id为确定指标值
"formula:"+driveIndFormula+";"+ //env.put(baseIndValueMsg.getIndId(), Double.valueOf(indValue));
"errorValue:"+indValue+";"+"paramEnv:"+env); }catch(Exception e) {
//日志记录 e.printStackTrace();
String logInfo = compCalLog.getLogInfo(); logger.error("driveIndId:"+driveIndId+";"+
if(StringUtils.isNotBlank(logInfo)) { "formula:"+driveIndFormula+";"+
logInfo+="替换公式值出错:driveIndId:"+driveIndId+";"+ "errorValue:"+indValue+";"+"paramEnv:"+env);
"formula:"+driveIndFormula+";"+ //日志记录
"errorValue:"+indValue+";"+"paramEnv:"+env+"</n>"; String logInfo = compCalLog.getLogInfo();
compCalLog.setLogInfo(logInfo); if(StringUtils.isNotBlank(logInfo)) {
}else { logInfo+="替换公式值出错:driveIndId:"+driveIndId+";"+
compCalLog.setLogInfo("替换公式值出错:driveIndId:"+driveIndId+";"+ "formula:"+driveIndFormula+";"+
"formula:"+driveIndFormula+";"+ "errorValue:"+indValue+";"+"paramEnv:"+env+"</n>";
"errorValue:"+indValue+";"+"paramEnv:"+env+"</n>"); compCalLog.setLogInfo(logInfo);
}else {
compCalLog.setLogInfo("替换公式值出错:driveIndId:"+driveIndId+";"+
"formula:"+driveIndFormula+";"+
"errorValue:"+indValue+";"+"paramEnv:"+env+"</n>");
}
} }
} confirmList.add(baseIndValueMsg.getIsFinish());
confirmList.add(baseIndValueMsg.getIsFinish()); if (++numberOfConfirm >= indIdSize) {//子actor全部返回
if (++numberOfConfirm >= indIdSize) {//子actor全部返回 if(!confirmList.contains(0)) {//取所有基础指标值没错
if(!confirmList.contains(0)) {//取所有基础指标值没错 //进行考核指标值计算
//进行考核指标值计算 try {
try { String driveIndValue = AviatorEvaluator.execute(driveIndFormula).toString();
String driveIndValue = AviatorEvaluator.execute(driveIndFormula).toString(); //保留四位小数
//保留四位小数 if(!driveIndValue.equals("NaN") && !driveIndValue.equals("Infinite")) {
if(!driveIndValue.equals("NaN") && !driveIndValue.equals("Infinite")) { driveIndValue = String.format("%.4f",
driveIndValue = String.format("%.4f", new BigDecimal(Double.valueOf(driveIndValue)));
new BigDecimal(Double.valueOf(driveIndValue))); }
} //判断结果表中是否已存在该结果数据,存在则覆盖
//判断结果表中是否已存在该结果数据,存在则覆盖 DriveIndCalResultDef driveIndCalResult = driveIndCalResultService.
DriveIndCalResultDef driveIndCalResult = driveIndCalResultService. findCalResultDataIsExist(compareId, compareObj, driveIndId, date);
findCalResultDataIsExist(compareId, compareObj, driveIndId, date); if(driveIndCalResult==null) {
if(driveIndCalResult==null) { driveIndCalResult = new DriveIndCalResultDef(compareId,
driveIndCalResult = new DriveIndCalResultDef(compareId, driveIndId,compareObj,date,driveIndValue,unit,
driveIndId,compareObj,date,driveIndValue,unit, "1","1","admin",code,baseIndValueMsg.getCompareObjDesc());
"1","1","admin",code,baseIndValueMsg.getCompareObjDesc()); }else {
}else { driveIndCalResult.setCode(code);
driveIndCalResult.setCode(code); driveIndCalResult.setUnit(unit);
driveIndCalResult.setUnit(unit); driveIndCalResult.setValue(driveIndValue);
driveIndCalResult.setValue(driveIndValue); driveIndCalResult.setLastUpdateTime(DateUtils.formatDate(new Date(), "yyyy-MM-dd HH:mm:ss"));
driveIndCalResult.setLastUpdateTime(DateUtils.formatDate(new Date(), "yyyy-MM-dd HH:mm:ss")); }
} //保存进考核指标结果表中
//保存进考核指标结果表中 driveIndCalResultService.saveOrUpdate(driveIndCalResult);
driveIndCalResultService.saveOrUpdate(driveIndCalResult);
//返回指标值回去算平均值和排名
//返回指标值回去算平均值和排名 CalIndAverageAndRankMsg driveIndAverageAndRankMsg =
CalIndAverageAndRankMsg driveIndAverageAndRankMsg = new CalIndAverageAndRankMsg(driveIndCalResult.getId(),
new CalIndAverageAndRankMsg(driveIndCalResult.getId(), compareId,driveIndId,compareObj,date,driveIndValue,
compareId,driveIndId,compareObj,date,driveIndValue, unit,indType,scoreCardId,averageDriveIndFormula,compCalLogId);
unit,indType,scoreCardId,averageDriveIndFormula,compCalLogId); driveIndIdCalActor.tell(driveIndAverageAndRankMsg,ActorRef.noSender());
driveIndIdCalActor.tell(driveIndAverageAndRankMsg,ActorRef.noSender()); } catch (Exception e) {
} catch (Exception e) { //判断结果表中是否已存在该结果数据,存在则覆盖
//判断结果表中是否已存在该结果数据,存在则覆盖 // DriveIndCalResultDef driveIndCalResult = driveIndCalResultService.
DriveIndCalResultDef driveIndCalResult = driveIndCalResultService. // findCalResultDataIsExist(compareId, compareObj, driveIndId, date);
findCalResultDataIsExist(compareId, compareObj, driveIndId, date); // if(driveIndCalResult==null) {
if(driveIndCalResult==null) { // driveIndCalResult = new DriveIndCalResultDef(compareId,
driveIndCalResult = new DriveIndCalResultDef(compareId, // driveIndId,compareObj,date,"NaN",unit,
driveIndId,compareObj,date,"NaN",unit, // "1","0","admin",code,baseIndValueMsg.getCompareObjDesc());
"1","0","admin",code,baseIndValueMsg.getCompareObjDesc()); // }else {
}else { // driveIndCalResult.setCode(code);
driveIndCalResult.setCode(code); // driveIndCalResult.setUnit(unit);
driveIndCalResult.setUnit(unit); // driveIndCalResult.setValue("NaN");
driveIndCalResult.setValue("NaN"); // driveIndCalResult.setLastUpdateTime(DateUtils.formatDate(new Date(), "yyyy-MM-dd HH:mm:ss"));
driveIndCalResult.setLastUpdateTime(DateUtils.formatDate(new Date(), "yyyy-MM-dd HH:mm:ss")); // }
// driveIndCalResultService.saveOrUpdate(driveIndCalResult);
logger.error("driveIndId:"+driveIndId+";"+
"paramEnv:"+env+";formula:"+driveIndFormula);
//日志记录
String logInfo = compCalLog.getLogInfo();
if(StringUtils.isNotBlank(logInfo)) {
logInfo+="计算考核指标出错:driveIndId:"+driveIndId+";"+
"paramEnv:"+env+";formula:"+driveIndFormula+"</n>";
compCalLog.setLogInfo(logInfo);
}else {
compCalLog.setLogInfo("计算考核指标出错:driveIndId:"+driveIndId+";"+
"paramEnv:"+env+";formula:"+driveIndFormula+"</n>");
}
//表示计算错误,不生成考核结果
CalIndAverageAndRankMsg driveIndAverageAndRankMsg =
new CalIndAverageAndRankMsg(-1,
compareId,driveIndId,compareObj,date,"NaN",
unit,indType,scoreCardId,averageDriveIndFormula,compCalLogId);
driveIndIdCalActor.tell(driveIndAverageAndRankMsg,ActorRef.noSender());
} }
driveIndCalResultService.saveOrUpdate(driveIndCalResult); }else {
//返回考核指标因为考核指标公式中的数据项不存在而导致的计算错误标识
logger.error("driveIndId:"+driveIndId+";"+
"paramEnv:"+env+";formula:"+driveIndFormula);
//日志记录
String logInfo = compCalLog.getLogInfo();
if(StringUtils.isNotBlank(logInfo)) {
logInfo+="计算考核指标出错:driveIndId:"+driveIndId+";"+
"paramEnv:"+env+";formula:"+driveIndFormula+"</n>";
compCalLog.setLogInfo(logInfo);
}else {
compCalLog.setLogInfo("计算考核指标出错:driveIndId:"+driveIndId+";"+
"paramEnv:"+env+";formula:"+driveIndFormula+"</n>");
}
CalIndAverageAndRankMsg driveIndAverageAndRankMsg = CalIndAverageAndRankMsg driveIndAverageAndRankMsg =
new CalIndAverageAndRankMsg(driveIndCalResult.getId(), new CalIndAverageAndRankMsg(-1,
compareId,driveIndId,compareObj,date,"NaN", compareId,driveIndId,compareObj,date,"NaN",
unit,indType,scoreCardId,averageDriveIndFormula,compCalLogId); unit,indType,scoreCardId,averageDriveIndFormula,compCalLogId);
driveIndIdCalActor.tell(driveIndAverageAndRankMsg,ActorRef.noSender()); driveIndIdCalActor.tell(driveIndAverageAndRankMsg,ActorRef.noSender());
} }
}else {
//返回考核指标因为考核指标公式中的数据项不存在而导致的计算错误标识
CalIndAverageAndRankMsg driveIndAverageAndRankMsg =
new CalIndAverageAndRankMsg(-1,
compareId,driveIndId,compareObj,date,"NaN",
unit,indType,scoreCardId,averageDriveIndFormula,compCalLogId);
driveIndIdCalActor.tell(driveIndAverageAndRankMsg,ActorRef.noSender());
} }
} }
//保存日志 //保存日志
......
...@@ -208,16 +208,22 @@ public class IndicatorsReportService { ...@@ -208,16 +208,22 @@ public class IndicatorsReportService {
String indRule = driveIndDef.getIndRule(); String indRule = driveIndDef.getIndRule();
Map<String,String> valueRate = new HashMap<>(); Map<String,String> valueRate = new HashMap<>();
for(IndicatorsReportOne indReportData : datas) { for(IndicatorsReportOne indReportData : datas) {
if(StringUtils.isBlank(indReportData.getValueRate())) {
continue;
}
valueRate.put(indReportData.getCompareObj(), indReportData.getValueRate()); valueRate.put(indReportData.getCompareObj(), indReportData.getValueRate());
} }
//增幅排名 if(!valueRate.isEmpty()) {
Map<String,Integer> valueRateRank = CalculateUtils.rankValue(valueRate, indRule); //增幅排名
for(Map.Entry<String,Integer> map : valueRateRank.entrySet()) { Map<String,Integer> valueRateRank = CalculateUtils.rankValue(valueRate, indRule);
for(int i=0;i<datas.size();i++) { for(Map.Entry<String,Integer> map : valueRateRank.entrySet()) {
if(map.getKey().equals(datas.get(i).getCompareObj())) { for(int i=0;i<datas.size();i++) {
datas.get(i).setValueRateRank(map.getValue()+""); IndicatorsReportOne data = datas.get(i);
datas.set(i, datas.get(i)); if(map.getKey().equals(data.getCompareObj())) {
break; data.setValueRateRank(map.getValue()+"");
datas.set(i, data);
break;
}
} }
} }
} }
...@@ -316,17 +322,18 @@ public class IndicatorsReportService { ...@@ -316,17 +322,18 @@ public class IndicatorsReportService {
//同比提升单位 //同比提升单位
Map<String,Object> sameImproveResult = this.sameImproveUnits(indId, date, compareObjs, Map<String,Object> sameImproveResult = this.sameImproveUnits(indId, date, compareObjs,
calDatas); calDatas);
indReportData.setSameImproveUnits(Integer.parseInt(sameImproveResult.get("improveNum").toString())); if(Integer.parseInt(sameImproveResult.get("improveNum").toString())!=0) {
indReportData.setSameImproveUnits(Integer.parseInt(sameImproveResult.get("improveNum").toString()));
}
//同比提升前三 //同比提升前三
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()) {
//根据省对市地区顺序排列排名并列的情况
Map<String,Object> objSortRank = CalculateUtils.rankByObjSort(resultRank, objSort);
resultRank = (Map<String,Integer>)objSortRank.get("rankMap");
end = Integer.parseInt(objSortRank.get("rankNum").toString());
StringBuilder sameImproveHeadThree = new StringBuilder("");//同比提升前三 StringBuilder sameImproveHeadThree = new StringBuilder("");//同比提升前三
StringBuilder sameImproveHeadThreeDesc = new StringBuilder(""); StringBuilder sameImproveHeadThreeDesc = new StringBuilder("");
for(Map.Entry<String,Integer> entry : resultRank.entrySet()) { for(Map.Entry<String,Integer> entry : resultRank.entrySet()) {
......
...@@ -90,7 +90,8 @@ public class CalculateUtils { ...@@ -90,7 +90,8 @@ public class CalculateUtils {
for(Entry<String,Double> entry : compareMap.entrySet()) { for(Entry<String,Double> entry : compareMap.entrySet()) {
if(i==0) { if(i==0) {
result.put(entry.getKey(), 1); result.put(entry.getKey(), 1);
order+=1; headIndValue = entry.getValue();
order++;
i++; i++;
continue; continue;
} }
...@@ -352,20 +353,26 @@ public class CalculateUtils { ...@@ -352,20 +353,26 @@ 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("4302", "48.0000");
// map.put("1002", "-1"); map.put("4308", "24.0000");
// map.put("1003", "-4"); map.put("4304", "24.0000");
// map.put("1004", "3"); map.put("4310", "43.9100");
// map.put("1005", "5"); map.put("4331", "48.0000");
// map.put("1006", "7"); map.put("4312", "48.0000");
// map.put("1007", "0"); map.put("4313", "24.0000");
// map.put("1008", "-6"); map.put("4303", "39.8400");
map.put("4309", "48.0000");
map.put("4307", "48.0000");
map.put("4301", "48.0000");
map.put("4306", "48.0000");
map.put("4305", "48.0000");
map.put("4311", "39.8400");
CalculateUtils cal = new CalculateUtils(); CalculateUtils cal = new CalculateUtils();
System.out.println(cal.isValidformula("([1001]+[1002])-[1004]")); // System.out.println(cal.isValidformula("([1001]+[1002])-[1004]"));
// Map<String,Integer> result = cal.rankValue(map, "0"); Map<String,Integer> result = cal.rankValue(map, "1");
// result = cal.sortMapByValue(result,1); result = cal.sortMapByValue(result,1);
// 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<>();
......
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