Commit d94d480c by hzc

对标运算加try捕获未知异常

parent 82229af3
...@@ -10,6 +10,7 @@ import com.keymobile.indicators.constant.Constants; ...@@ -10,6 +10,7 @@ import com.keymobile.indicators.constant.Constants;
import com.keymobile.indicators.model.entity.indicators.CompareUnitCalLog; import com.keymobile.indicators.model.entity.indicators.CompareUnitCalLog;
import com.keymobile.indicators.service.hytobacco.CompareUnitCalLogService; import com.keymobile.indicators.service.hytobacco.CompareUnitCalLogService;
import com.keymobile.indicators.utils.LogManager; import com.keymobile.indicators.utils.LogManager;
import com.netflix.discovery.converters.jackson.EurekaXmlJacksonCodec;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -51,6 +52,7 @@ public class BeforeCompareUnitCalActor extends AbstractActor{ ...@@ -51,6 +52,7 @@ public class BeforeCompareUnitCalActor extends AbstractActor{
@Override @Override
public Receive createReceive() { public Receive createReceive() {
try {
return receiveBuilder() return receiveBuilder()
.match(StartCompareUnitCalMsg.class,beforeCompareUnitCalMsg -> { .match(StartCompareUnitCalMsg.class,beforeCompareUnitCalMsg -> {
List<CompareUnitDef> compareUnitDefs = beforeCompareUnitCalMsg.getCompareInitDefs(); List<CompareUnitDef> compareUnitDefs = beforeCompareUnitCalMsg.getCompareInitDefs();
...@@ -88,7 +90,7 @@ public class BeforeCompareUnitCalActor extends AbstractActor{ ...@@ -88,7 +90,7 @@ public class BeforeCompareUnitCalActor extends AbstractActor{
} }
if(!currentCompareUnitDef.isEmpty()) { if(!currentCompareUnitDef.isEmpty()) {
currentDate = currentCompareUnitDef.get(0).getDate(); currentDate = currentCompareUnitDef.get(0).getDate();
if("0".equals(isTest)) { if("0".equals(isTest)) {
logger.info("进行date:"+currentDate+" 的对标单元试运行计算....."); logger.info("进行date:"+currentDate+" 的对标单元试运行计算.....");
}else { }else {
...@@ -108,10 +110,10 @@ public class BeforeCompareUnitCalActor extends AbstractActor{ ...@@ -108,10 +110,10 @@ public class BeforeCompareUnitCalActor extends AbstractActor{
if("1".equals(isTest)) {//正式对标单元运算才进行报表数据生成 if("1".equals(isTest)) {//正式对标单元运算才进行报表数据生成
Map<String,String> compareObjMap = new HashMap<>(); Map<String,String> compareObjMap = new HashMap<>();
logger.info("进行date:"+currentDate+" 指标本期同期报表数据和考核指标报表数据2数据整合"); logger.info("进行date:"+currentDate+" 指标本期同期报表数据和考核指标报表数据2数据整合");
//整合考核指标报表数据2 //整合考核指标报表数据2
for(CompareUnitDef unitDef : currentCompareUnitDef) { for(CompareUnitDef unitDef : currentCompareUnitDef) {
if(StringUtils.isNotBlank(unitDef.getIndIds()) && if(StringUtils.isNotBlank(unitDef.getIndIds()) &&
StringUtils.isNotBlank(unitDef.getCompareObjs())) { StringUtils.isNotBlank(unitDef.getCompareObjs())) {
//用map整合对标机构 //用map整合对标机构
List<String> compareObjsList =Arrays List<String> compareObjsList =Arrays
...@@ -122,31 +124,31 @@ public class BeforeCompareUnitCalActor extends AbstractActor{ ...@@ -122,31 +124,31 @@ public class BeforeCompareUnitCalActor extends AbstractActor{
//整合指标本期同期报表数据 //整合指标本期同期报表数据
indicatorsReportService.dealReportOne( indicatorsReportService.dealReportOne(
unitDef.getCompareId(), Arrays.asList(unitDef.getIndIds().split(",")), unitDef.getCompareId(), Arrays.asList(unitDef.getIndIds().split(",")),
Arrays.asList(unitDef.getCompareObjs().split(",")), Arrays.asList(unitDef.getCompareObjs().split(",")),
unitDef.getDate(), code); unitDef.getDate(), code);
//整合考核指标报表数据2 //整合考核指标报表数据2
indicatorsReportService.dealDriveIndReportTwoData( indicatorsReportService.dealDriveIndReportTwoData(
unitDef.getCompareId(), Arrays.asList(unitDef.getIndIds().split(",")), unitDef.getCompareId(), Arrays.asList(unitDef.getIndIds().split(",")),
Arrays.asList(unitDef.getCompareObjs().split(",")), unitDef.getDate(),code); Arrays.asList(unitDef.getCompareObjs().split(",")), unitDef.getDate(),code);
} }
} }
//整合基础项本期同期报表数据 //整合基础项本期同期报表数据
logger.info("进行date:"+currentDate+" 基础项本期同期报表数据整合"); logger.info("进行date:"+currentDate+" 基础项本期同期报表数据整合");
if(!compareObjMap.isEmpty()) { if(!compareObjMap.isEmpty()) {
List<String> compareObjs = new ArrayList<String>(compareObjMap.keySet()); List<String> compareObjs = new ArrayList<String>(compareObjMap.keySet());
indicatorsReportService.dealBaseIndReportOneData(currentDate, compareObjs, code); indicatorsReportService.dealBaseIndReportOneData(currentDate, compareObjs, code);
} }
//整合考核指标报表数据3 //整合考核指标报表数据3
logger.info("进行date:"+currentDate+" 指标报表3数据整合"); logger.info("进行date:"+currentDate+" 指标报表3数据整合");
//删除历史数据 //删除历史数据
indicatorsReportService.deleteReportThreeDataByParam(currentDate, indicatorsReportService.deleteReportThreeDataByParam(currentDate,
new ArrayList<String>(compareObjMap.keySet()),code); new ArrayList<String>(compareObjMap.keySet()),code);
for(CompareUnitDef unitDef : currentCompareUnitDef) { for(CompareUnitDef unitDef : currentCompareUnitDef) {
indicatorsReportService.dealDriveIndReportThreeData( indicatorsReportService.dealDriveIndReportThreeData(
unitDef.getCompareId(), Arrays.asList(unitDef.getIndIds().split(",")), unitDef.getCompareId(), Arrays.asList(unitDef.getIndIds().split(",")),
unitDef.getDate(),code); unitDef.getDate(),code);
} }
} }
...@@ -156,6 +158,12 @@ public class BeforeCompareUnitCalActor extends AbstractActor{ ...@@ -156,6 +158,12 @@ public class BeforeCompareUnitCalActor extends AbstractActor{
if(compCalLog!=null) { if(compCalLog!=null) {
compCalLog.setEndTime(System.currentTimeMillis()+""); compCalLog.setEndTime(System.currentTimeMillis()+"");
compCalLog.setRunStatus("1"); compCalLog.setRunStatus("1");
String logInfo = compCalLog.getLogInfo();
if(StringUtils.isBlank(logInfo)){
logInfo = "没异常";
}
logInfo = "整体试运算成功-运算过程:"+logInfo;
compCalLog.setLogInfo(logInfo);
compareUnitCalLogService.saveOrUndate(compCalLog); compareUnitCalLogService.saveOrUndate(compCalLog);
} }
LogManager.logInfo(Constants.LOG_INDICATOR_UNIT_CAL_API,"完成对标单元id:{},日期:{} 的试运行计算",compCalLogId,currentDate ); LogManager.logInfo(Constants.LOG_INDICATOR_UNIT_CAL_API,"完成对标单元id:{},日期:{} 的试运行计算",compCalLogId,currentDate );
...@@ -164,18 +172,34 @@ public class BeforeCompareUnitCalActor extends AbstractActor{ ...@@ -164,18 +172,34 @@ public class BeforeCompareUnitCalActor extends AbstractActor{
if(compCalLog!=null) { if(compCalLog!=null) {
compCalLog.setEndTime(System.currentTimeMillis()+""); compCalLog.setEndTime(System.currentTimeMillis()+"");
compCalLog.setRunStatus("1"); compCalLog.setRunStatus("1");
if(compCalLog.getStatus()==1){ String logInfo = compCalLog.getLogInfo();
compCalLog.setLogInfo("运算成功"); if(StringUtils.isBlank(logInfo)){
logInfo = "没异常";
} }
logInfo = "整体运算成功-运算过程:"+logInfo;
compCalLog.setLogInfo(logInfo);
compareUnitCalLogService.saveOrUndate(compCalLog); compareUnitCalLogService.saveOrUndate(compCalLog);
} }
LogManager.logInfo(Constants.LOG_INDICATOR_UNIT_CAL_API,"完成对标单元id:{},日期:{} 的运行计算",compCalLogId,currentDate ); LogManager.logInfo(Constants.LOG_INDICATOR_UNIT_CAL_API,"完成对标单元id:{},日期:{} 的正式运行计算",compCalLogId,currentDate );
logger.info("本期同期对标单元计算完成"); logger.info("本期同期对标单元计算完成");
} }
} }
} }
}) })
.build(); .build();
}catch (Exception e){
e.printStackTrace();
CompareUnitCalLog compCalLog = compareUnitCalLogService.findById(compCalLogId);
if(compCalLog!=null){
compCalLog.setEndTime(System.currentTimeMillis()+"");
compCalLog.setRunStatus("1");
compCalLog.setStatus(0);
compCalLog.setLogInfo("运算失败");
compareUnitCalLogService.saveOrUndate(compCalLog);
}
}
return null;
} }
} }
...@@ -65,6 +65,8 @@ public class CompareUnitCalActor extends AbstractActor{ ...@@ -65,6 +65,8 @@ public class CompareUnitCalActor extends AbstractActor{
@Override @Override
public Receive createReceive() { public Receive createReceive() {
try {
return receiveBuilder() return receiveBuilder()
.match(CompareUnitCalMsg.class,compareUnitCalMsg -> { .match(CompareUnitCalMsg.class,compareUnitCalMsg -> {
CompareUnitDef compareUnitDef = compareUnitCalMsg.getCompareUnitDef(); CompareUnitDef compareUnitDef = compareUnitCalMsg.getCompareUnitDef();
...@@ -75,7 +77,7 @@ public class CompareUnitCalActor extends AbstractActor{ ...@@ -75,7 +77,7 @@ public class CompareUnitCalActor extends AbstractActor{
objScoreRuleId = compareUnitDef.getObjScoreRuleId(); objScoreRuleId = compareUnitDef.getObjScoreRuleId();
code = compareUnitCalMsg.getCode(); code = compareUnitCalMsg.getCode();
isTest = compareUnitCalMsg.getIsTest(); isTest = compareUnitCalMsg.getIsTest();
compCalLogId = compareUnitCalMsg.getCompCalLogId();
// //新增运行日志记录 // //新增运行日志记录
// CompareUnitCalLog compCalLog = new CompareUnitCalLog(compareId,date, // CompareUnitCalLog compCalLog = new CompareUnitCalLog(compareId,date,
// System.currentTimeMillis()+"","0"); // System.currentTimeMillis()+"","0");
...@@ -85,7 +87,7 @@ public class CompareUnitCalActor extends AbstractActor{ ...@@ -85,7 +87,7 @@ public class CompareUnitCalActor extends AbstractActor{
// compCalLog.setType(isTest); // compCalLog.setType(isTest);
//保存 //保存
// Integer compCalLogId = compareUnitCalLogService.saveOrUndate(compCalLog); // Integer compCalLogId = compareUnitCalLogService.saveOrUndate(compCalLog);
compCalLogId = compareUnitCalMsg.getCompCalLogId();
//获取对标对象 //获取对标对象
String compareObjsString = compareUnitDef.getCompareObjs(); String compareObjsString = compareUnitDef.getCompareObjs();
//获取对标指标 //获取对标指标
...@@ -161,5 +163,18 @@ public class CompareUnitCalActor extends AbstractActor{ ...@@ -161,5 +163,18 @@ public class CompareUnitCalActor extends AbstractActor{
} }
}) })
.build(); .build();
}catch (Exception e){
e.printStackTrace();
CompareUnitCalLog compCalLog = compareUnitCalLogService.findById(compCalLogId);
if(compCalLog!=null){
compCalLog.setEndTime(System.currentTimeMillis()+"");
compCalLog.setRunStatus("1");
compCalLog.setStatus(0);
compCalLog.setLogInfo("运算失败");
compareUnitCalLogService.saveOrUndate(compCalLog);
}
}
return null;
} }
} }
...@@ -6,6 +6,8 @@ import java.util.List; ...@@ -6,6 +6,8 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import com.keymobile.indicators.model.entity.indicators.CompareUnitCalLog;
import com.keymobile.indicators.service.hytobacco.CompareUnitCalLogService;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -41,7 +43,8 @@ public class DriveIndIdCalActor extends AbstractActor{ ...@@ -41,7 +43,8 @@ public class DriveIndIdCalActor extends AbstractActor{
private DriveIndDefService driveIndDefService = SpringUtil.getBean(DriveIndDefService.class); private DriveIndDefService driveIndDefService = SpringUtil.getBean(DriveIndDefService.class);
private IndicatorsReportService indiReportService = SpringUtil.getBean(IndicatorsReportService.class); private IndicatorsReportService indiReportService = SpringUtil.getBean(IndicatorsReportService.class);
private CompareUnitCalLogService compareUnitCalLogService = SpringUtil.getBean(CompareUnitCalLogService.class);
private int numberOfConfirm = 0;//定义返回确认消息的子actor private int numberOfConfirm = 0;//定义返回确认消息的子actor
private int compareObjSize = 0;//对标对象个数 private int compareObjSize = 0;//对标对象个数
...@@ -58,6 +61,8 @@ public class DriveIndIdCalActor extends AbstractActor{ ...@@ -58,6 +61,8 @@ public class DriveIndIdCalActor extends AbstractActor{
private String isTest; private String isTest;
private Integer compCalLogId;
private final ActorRef compareUnitCalActor;//定义父actor private final ActorRef compareUnitCalActor;//定义父actor
static public Props props(ActorRef compareUnitCalActor) { static public Props props(ActorRef compareUnitCalActor) {
...@@ -70,179 +75,195 @@ public class DriveIndIdCalActor extends AbstractActor{ ...@@ -70,179 +75,195 @@ public class DriveIndIdCalActor extends AbstractActor{
@Override @Override
public Receive createReceive() { public Receive createReceive() {
return receiveBuilder() Receive receive = null;
.match(DriveIndIdCalMsg.class,driveIndIdCalMsg -> { try {
String compareId = driveIndIdCalMsg.getCompareId();
String indId = driveIndIdCalMsg.getIndId(); receive= receiveBuilder()
List<String> compareObjs = driveIndIdCalMsg.getCompareObj(); .match(DriveIndIdCalMsg.class, driveIndIdCalMsg -> {
Integer date = driveIndIdCalMsg.getDate(); String compareId = driveIndIdCalMsg.getCompareId();
firstExe = driveIndIdCalMsg.getFirstExe(); String indId = driveIndIdCalMsg.getIndId();
averageObj = driveIndIdCalMsg.getAverageObj(); List<String> compareObjs = driveIndIdCalMsg.getCompareObj();
compareObjSize = compareObjs.size(); Integer date = driveIndIdCalMsg.getDate();
code = driveIndIdCalMsg.getCode(); firstExe = driveIndIdCalMsg.getFirstExe();
isTest = driveIndIdCalMsg.getIsTest(); averageObj = driveIndIdCalMsg.getAverageObj();
compareObjSize = compareObjs.size();
//日志记录id code = driveIndIdCalMsg.getCode();
Integer compCalLogId = driveIndIdCalMsg.getCompCalLogId(); isTest = driveIndIdCalMsg.getIsTest();
for(String compareObj : compareObjs) { //日志记录id
List<DimValue> dimValueList = new ArrayList<>(); compCalLogId = driveIndIdCalMsg.getCompCalLogId();
DimValue dimCompareObj = new DimValue("dim1",compareObj,"varchar");
DimValue dimDateObj = new DimValue("dim2",date,"number"); for (String compareObj : compareObjs) {
dimValueList.add(dimCompareObj); List<DimValue> dimValueList = new ArrayList<>();
dimValueList.add(dimDateObj); DimValue dimCompareObj = new DimValue("dim1", compareObj, "varchar");
DimValue dimDateObj = new DimValue("dim2", date, "number");
DriveIndIdObjCalMsg driveIndIdObjCalMsg = new DriveIndIdObjCalMsg(compareId, dimValueList.add(dimCompareObj);
indId,compareObj,date,dimValueList,compCalLogId, dimValueList.add(dimDateObj);
driveIndIdCalMsg.getCode(),driveIndIdCalMsg.getIsTest());
ActorRef driveIndIdObjCalActor = this.getContext() DriveIndIdObjCalMsg driveIndIdObjCalMsg = new DriveIndIdObjCalMsg(compareId,
.actorOf(Props.create(DriveIndIdObjCalActor.class, indId, compareObj, date, dimValueList, compCalLogId,
()->new DriveIndIdObjCalActor(getSelf()))); driveIndIdCalMsg.getCode(), driveIndIdCalMsg.getIsTest());
driveIndIdObjCalActor.tell(driveIndIdObjCalMsg, getSelf()); ActorRef driveIndIdObjCalActor = this.getContext()
} .actorOf(Props.create(DriveIndIdObjCalActor.class,
}) () -> new DriveIndIdObjCalActor(getSelf())));
.match(CalIndAverageAndRankMsg.class,calIndAverageAndRankMsg -> { driveIndIdObjCalActor.tell(driveIndIdObjCalMsg, getSelf());
String value = calIndAverageAndRankMsg.getDriveIndValue(); }
String id = String.valueOf(calIndAverageAndRankMsg.getId()); })
String indType = calIndAverageAndRankMsg.getIndType();//指标类型:正向 反向 .match(CalIndAverageAndRankMsg.class, calIndAverageAndRankMsg -> {
Integer scoreCardId = calIndAverageAndRankMsg.getScoreCardId();//评分卡id String value = calIndAverageAndRankMsg.getDriveIndValue();
Integer compCalLogId = calIndAverageAndRankMsg.getCompCalLogId();//记录日志id String id = String.valueOf(calIndAverageAndRankMsg.getId());
if(!"-1".equals(id)) { String indType = calIndAverageAndRankMsg.getIndType();//指标类型:正向 反向
valueMap.put(id, value); Integer scoreCardId = calIndAverageAndRankMsg.getScoreCardId();//评分卡id
compareObjs.add(calIndAverageAndRankMsg.getCompareObj()); Integer compCalLogId = calIndAverageAndRankMsg.getCompCalLogId();//记录日志id
} if (!"-1".equals(id)) {
if (++numberOfConfirm >= compareObjSize) {//子actor全部返回 valueMap.put(id, value);
if(!valueMap.isEmpty() && !compareObjs.isEmpty()) { compareObjs.add(calIndAverageAndRankMsg.getCompareObj());
//如果是先执行且没有平均分参考对象的,则不进行平均分和排名计算 }
if("1".equals(firstExe) && StringUtils.isBlank(averageObj)) { if (++numberOfConfirm >= compareObjSize) {//子actor全部返回
//发送确认信息给父actor if (!valueMap.isEmpty() && !compareObjs.isEmpty()) {
FirstExeConfirmMsg firstExeConfirmMsg = new FirstExeConfirmMsg(1,"",compCalLogId); //如果是先执行且没有平均分参考对象的,则不进行平均分和排名计算
compareUnitCalActor.tell(firstExeConfirmMsg, ActorRef.noSender()); if ("1".equals(firstExe) && StringUtils.isBlank(averageObj)) {
}else { //发送确认信息给父actor
String actualAverage = "0.0";//实际平均分 FirstExeConfirmMsg firstExeConfirmMsg = new FirstExeConfirmMsg(1, "", compCalLogId);
if(StringUtils.isNotBlank(averageObj)) { compareUnitCalActor.tell(firstExeConfirmMsg, ActorRef.noSender());
if("0".equals(isTest)) { } else {
TestDriveIndCalResultDef provinceDriveIndCalResult = String actualAverage = "0.0";//实际平均分
testDriveIndCalResultService.findCompareObjInfo( if (StringUtils.isNotBlank(averageObj)) {
calIndAverageAndRankMsg.getDriveIndId(), if ("0".equals(isTest)) {
calIndAverageAndRankMsg.getDate(), TestDriveIndCalResultDef provinceDriveIndCalResult =
averageObj,code); testDriveIndCalResultService.findCompareObjInfo(
if(provinceDriveIndCalResult!=null) { calIndAverageAndRankMsg.getDriveIndId(),
//获取实际平均分 calIndAverageAndRankMsg.getDate(),
actualAverage = provinceDriveIndCalResult.getValue(); averageObj, code);
} if (provinceDriveIndCalResult != null) {
}else { //获取实际平均分
DriveIndCalResultDef provinceDriveIndCalResult = actualAverage = provinceDriveIndCalResult.getValue();
driveIndCalResultService.findCompareObjInfo( }
calIndAverageAndRankMsg.getDriveIndId(), } else {
calIndAverageAndRankMsg.getDate(), DriveIndCalResultDef provinceDriveIndCalResult =
averageObj,code); driveIndCalResultService.findCompareObjInfo(
if(provinceDriveIndCalResult!=null) { calIndAverageAndRankMsg.getDriveIndId(),
//获取实际平均分 calIndAverageAndRankMsg.getDate(),
actualAverage = provinceDriveIndCalResult.getValue(); averageObj, code);
if (provinceDriveIndCalResult != null) {
//获取实际平均分
actualAverage = provinceDriveIndCalResult.getValue();
}
} }
} }
} //算组内平均数
//算组内平均数 String average = driveIndDefService.calGroupAverage(
String average = driveIndDefService.calGroupAverage( calIndAverageAndRankMsg.getIndFormula(), compareObjs,
calIndAverageAndRankMsg.getIndFormula(), compareObjs, calIndAverageAndRankMsg.getDate(), code);
calIndAverageAndRankMsg.getDate(),code); //算组内排名
//算组内排名 Map<String, Integer> rankValue = CalculateUtils.rankValue(valueMap, indType);
Map<String,Integer> rankValue = CalculateUtils.rankValue(valueMap, indType); List<DriveIndCalResultDef> dataList = new ArrayList<>();
List<DriveIndCalResultDef> dataList = new ArrayList<>(); List<TestDriveIndCalResultDef> testDataList = new ArrayList<>();
List<TestDriveIndCalResultDef> testDataList = new ArrayList<>(); //填充平均数和排名到考核结果中
//填充平均数和排名到考核结果中 for (Entry<String, Integer> entry : rankValue.entrySet()) {
for(Entry<String,Integer> entry : rankValue.entrySet()) { if ("0".equals(isTest)) {
if("0".equals(isTest)) { //根据id获取指标值结果
//根据id获取指标值结果 TestDriveIndCalResultDef driveIndCalResult = testDriveIndCalResultService.
TestDriveIndCalResultDef driveIndCalResult = testDriveIndCalResultService. findById(Integer.parseInt(entry.getKey()));
findById(Integer.parseInt(entry.getKey())); if (driveIndCalResult != null) {
if(driveIndCalResult!=null) { driveIndCalResult.setAverage(average);
driveIndCalResult.setAverage(average); driveIndCalResult.setRank(entry.getValue());
driveIndCalResult.setRank(entry.getValue()); driveIndCalResult.setActualAverage(actualAverage);
driveIndCalResult.setActualAverage(actualAverage); testDataList.add(driveIndCalResult);
testDataList.add(driveIndCalResult); }
} } else {
}else { //根据id获取指标值结果
//根据id获取指标值结果 DriveIndCalResultDef driveIndCalResult = driveIndCalResultService.
DriveIndCalResultDef driveIndCalResult = driveIndCalResultService. findById(Integer.parseInt(entry.getKey()));
findById(Integer.parseInt(entry.getKey())); if (driveIndCalResult != null) {
if(driveIndCalResult!=null) { driveIndCalResult.setAverage(average);
driveIndCalResult.setAverage(average); driveIndCalResult.setRank(entry.getValue());
driveIndCalResult.setRank(entry.getValue()); driveIndCalResult.setActualAverage(actualAverage);
driveIndCalResult.setActualAverage(actualAverage); dataList.add(driveIndCalResult);
dataList.add(driveIndCalResult); }
} }
} }
} if ("0".equals(isTest)) {
if("0".equals(isTest)) { //批量保存修改
//批量保存修改 testDriveIndCalResultService.batchSaveOrUpdate(testDataList);
testDriveIndCalResultService.batchSaveOrUpdate(testDataList); //批量保存修改
//批量保存修改 testDataList.clear();
testDataList.clear(); } else {
}else { //批量保存修改
//批量保存修改 driveIndCalResultService.batchSaveOrUpdate(dataList);
driveIndCalResultService.batchSaveOrUpdate(dataList); //批量保存修改//批量保存修改
//批量保存修改//批量保存修改 dataList.clear();
dataList.clear(); }
} //根据评分卡算指标分数
//根据评分卡算指标分数 for (Entry<String, Integer> entry : rankValue.entrySet()) {
for(Entry<String,Integer> entry : rankValue.entrySet()) { if ("0".equals(isTest)) {
if("0".equals(isTest)) { //根据id获取指标值结果
//根据id获取指标值结果 TestDriveIndCalResultDef driveIndCalResult = testDriveIndCalResultService.
TestDriveIndCalResultDef driveIndCalResult = testDriveIndCalResultService. findById(Integer.parseInt(entry.getKey()));
findById(Integer.parseInt(entry.getKey())); if (driveIndCalResult != null) {
if(driveIndCalResult!=null) { //计算分数
//计算分数 Map<String, String> scoreMap = indScorecardService.calculateIndiScore(
Map<String,String> scoreMap = indScorecardService.calculateIndiScore( driveIndCalResult.getIndId(), driveIndCalResult.getDate(),
driveIndCalResult.getIndId(), driveIndCalResult.getDate(), driveIndCalResult.getCompareObj(), scoreCardId,
driveIndCalResult.getCompareObj(), scoreCardId, driveIndCalResult.getCompareId(), compareObjs, code);
driveIndCalResult.getCompareId(),compareObjs,code); driveIndCalResult.setScore(scoreMap.get("score"));
driveIndCalResult.setScore(scoreMap.get("score")); driveIndCalResult.setImproveScore(scoreMap.get("improveScore"));
driveIndCalResult.setImproveScore(scoreMap.get("improveScore")); testDataList.add(driveIndCalResult);
testDataList.add(driveIndCalResult); }
} } else {
}else { //根据id获取指标值结果
//根据id获取指标值结果 DriveIndCalResultDef driveIndCalResult = driveIndCalResultService.
DriveIndCalResultDef driveIndCalResult = driveIndCalResultService. findById(Integer.parseInt(entry.getKey()));
findById(Integer.parseInt(entry.getKey())); if (driveIndCalResult != null) {
if(driveIndCalResult!=null) { //计算分数
//计算分数 Map<String, String> scoreMap = indScorecardService.calculateIndiScore(
Map<String,String> scoreMap = indScorecardService.calculateIndiScore( driveIndCalResult.getIndId(), driveIndCalResult.getDate(),
driveIndCalResult.getIndId(), driveIndCalResult.getDate(), driveIndCalResult.getCompareObj(), scoreCardId,
driveIndCalResult.getCompareObj(), scoreCardId, driveIndCalResult.getCompareId(), compareObjs, code);
driveIndCalResult.getCompareId(),compareObjs,code); driveIndCalResult.setScore(scoreMap.get("score"));
driveIndCalResult.setScore(scoreMap.get("score")); driveIndCalResult.setImproveScore(scoreMap.get("improveScore"));
driveIndCalResult.setImproveScore(scoreMap.get("improveScore")); dataList.add(driveIndCalResult);
dataList.add(driveIndCalResult); }
} }
} }
} if ("0".equals(isTest)) {
if("0".equals(isTest)) { //批量保存修改
//批量保存修改 testDriveIndCalResultService.batchSaveOrUpdate(testDataList);
testDriveIndCalResultService.batchSaveOrUpdate(testDataList); //清空list
//清空list testDataList.clear();
testDataList.clear(); } else {
}else { //批量保存修改
//批量保存修改 driveIndCalResultService.batchSaveOrUpdate(dataList);
driveIndCalResultService.batchSaveOrUpdate(dataList); //整合本期同期报表数据
//整合本期同期报表数据 //indiReportService.dealReportOneDatas(dataList);
//indiReportService.dealReportOneDatas(dataList); //清空list
//清空list dataList.clear();
dataList.clear(); }
//发送确认信息给父actor
FirstExeConfirmMsg firstExeConfirmMsg = new FirstExeConfirmMsg(1, "", compCalLogId);
compareUnitCalActor.tell(firstExeConfirmMsg, ActorRef.noSender());
} }
} else {
//发送确认信息给父actor //发送确认信息给父actor
FirstExeConfirmMsg firstExeConfirmMsg = new FirstExeConfirmMsg(1,"",compCalLogId); FirstExeConfirmMsg firstExeConfirmMsg = new FirstExeConfirmMsg(0, "", compCalLogId);
compareUnitCalActor.tell(firstExeConfirmMsg, ActorRef.noSender()); compareUnitCalActor.tell(firstExeConfirmMsg, ActorRef.noSender());
} }
}else {
//发送确认信息给父actor
FirstExeConfirmMsg firstExeConfirmMsg = new FirstExeConfirmMsg(0,"",compCalLogId);
compareUnitCalActor.tell(firstExeConfirmMsg, ActorRef.noSender());
} }
} })
}) .build();
.build(); }catch (Exception e){
e.printStackTrace();
CompareUnitCalLog compCalLog = compareUnitCalLogService.findById(compCalLogId);
if(compCalLog!=null){
compCalLog.setEndTime(System.currentTimeMillis()+"");
compCalLog.setRunStatus("1");
compCalLog.setStatus(0);
compCalLog.setLogInfo("运算失败");
compareUnitCalLogService.saveOrUndate(compCalLog);
}
}
return receive;
} }
} }
...@@ -33,6 +33,7 @@ import com.keymobile.indicators.utils.SpringUtil; ...@@ -33,6 +33,7 @@ import com.keymobile.indicators.utils.SpringUtil;
import akka.actor.AbstractActor; import akka.actor.AbstractActor;
import akka.actor.ActorRef; import akka.actor.ActorRef;
import akka.actor.Props; import akka.actor.Props;
import org.springframework.data.redis.core.script.ReactiveScriptExecutor;
public class DriveIndIdObjCalActor extends AbstractActor{ public class DriveIndIdObjCalActor extends AbstractActor{
private Logger logger = LoggerFactory.getLogger(DriveIndIdObjCalActor.class); private Logger logger = LoggerFactory.getLogger(DriveIndIdObjCalActor.class);
...@@ -90,67 +91,72 @@ public class DriveIndIdObjCalActor extends AbstractActor{ ...@@ -90,67 +91,72 @@ public class DriveIndIdObjCalActor extends AbstractActor{
@Override @Override
public Receive createReceive() { public Receive createReceive() {
return receiveBuilder() Receive receive = null;
.match(DriveIndIdObjCalMsg.class, driveIndIdObjCalMsg -> { try {
compareId = driveIndIdObjCalMsg.getCompareId(); receive = receiveBuilder()
compareObj = driveIndIdObjCalMsg.getCompareObj(); .match(DriveIndIdObjCalMsg.class, driveIndIdObjCalMsg -> {
date = driveIndIdObjCalMsg.getDate(); compareId = driveIndIdObjCalMsg.getCompareId();
driveIndId = driveIndIdObjCalMsg.getIndId(); compareObj = driveIndIdObjCalMsg.getCompareObj();
//日志记录id date = driveIndIdObjCalMsg.getDate();
compCalLogId = driveIndIdObjCalMsg.getCompCalLogId(); driveIndId = driveIndIdObjCalMsg.getIndId();
code = driveIndIdObjCalMsg.getCode(); //日志记录id
isTest = driveIndIdObjCalMsg.getIsTest(); compCalLogId = driveIndIdObjCalMsg.getCompCalLogId();
code = driveIndIdObjCalMsg.getCode();
List<String> indIdList = new ArrayList<>();//定义存储从考核指标公式解析出来的基础指标id isTest = driveIndIdObjCalMsg.getIsTest();
DriveIndDef driveIndDef = driveIndDefService.getById(driveIndId); List<String> indIdList = new ArrayList<>();//定义存储从考核指标公式解析出来的基础指标id
if(driveIndDef==null) {
logger.info("DriveIndDef:"+driveIndId+" is not exist."); DriveIndDef driveIndDef = driveIndDefService.getById(driveIndId);
//返回父actor信息 if (driveIndDef == null) {
CalIndAverageAndRankMsg driveIndAverageAndRankMsg = logger.info("DriveIndDef:" + driveIndId + " is not exist.");
new CalIndAverageAndRankMsg(-1, //返回父actor信息
compareId,driveIndId,compareObj,date,"NaN", CalIndAverageAndRankMsg driveIndAverageAndRankMsg =
unit,indType,scoreCardId,averageDriveIndFormula,compCalLogId); new CalIndAverageAndRankMsg(-1,
driveIndIdCalActor.tell(driveIndAverageAndRankMsg,ActorRef.noSender()); compareId, driveIndId, compareObj, date, "NaN",
}else { unit, indType, scoreCardId, averageDriveIndFormula, compCalLogId);
unit = driveIndDef.getIndUnit();//指标单位 driveIndIdCalActor.tell(driveIndAverageAndRankMsg, ActorRef.noSender());
indType = driveIndDef.getIndRule();//指标类型:正向 反向 } else {
scoreCardId = driveIndDef.getIndCalScoreRule();//指标评分规则 unit = driveIndDef.getIndUnit();//指标单位
indType = driveIndDef.getIndRule();//指标类型:正向 反向
//获取考核指标的公式 scoreCardId = driveIndDef.getIndCalScoreRule();//指标评分规则
driveIndFormula = driveIndDef.getIndFormat();
averageDriveIndFormula = driveIndDef.getIndFormat();//定义用于返回父actor算平均分用的公式 //获取考核指标的公式
driveIndFormula = driveIndDef.getIndFormat();
Pattern p = Pattern.compile("(\\[[^\\]]*\\])"); averageDriveIndFormula = driveIndDef.getIndFormat();//定义用于返回父actor算平均分用的公式
Matcher m = p.matcher(driveIndFormula);
while(m.find()){ Pattern p = Pattern.compile("(\\[[^\\]]*\\])");
indIdList.add(m.group().substring(1, m.group().length()-1)); Matcher m = p.matcher(driveIndFormula);
} while (m.find()) {
//获取公式中的基础指标id indIdList.add(m.group().substring(1, m.group().length() - 1));
indIdSize =indIdList.size(); }
if(!indIdList.isEmpty()) { //获取公式中的基础指标id
for(String indId : indIdList) { indIdSize = indIdList.size();
GetBaseIndValueMsg getBaseIndValueMsg = new GetBaseIndValueMsg( if (!indIdList.isEmpty()) {
indId,driveIndIdObjCalMsg.getDimValues(), for (String indId : indIdList) {
driveIndIdObjCalMsg.getCode()); GetBaseIndValueMsg getBaseIndValueMsg = new GetBaseIndValueMsg(
ActorRef getBaseIndValueActor = this.getContext() indId, driveIndIdObjCalMsg.getDimValues(),
.actorOf(Props.create(GetBaseIndValueActor.class, driveIndIdObjCalMsg.getCode());
()->new GetBaseIndValueActor())); //传入日志id
getBaseIndValueActor.tell(getBaseIndValueMsg, getSelf()); getBaseIndValueMsg.setCompCalLogId(compCalLogId);
ActorRef getBaseIndValueActor = this.getContext()
.actorOf(Props.create(GetBaseIndValueActor.class,
() -> new GetBaseIndValueActor()));
getBaseIndValueActor.tell(getBaseIndValueMsg, getSelf());
}
} }
} }
} })
}) .match(BaseIndValueMsg.class, baseIndValueMsg -> {
.match(BaseIndValueMsg.class,baseIndValueMsg->{ //根据日志记录id获取日志
//根据日志记录id获取日志 CompareUnitCalLog compCalLog = null;
CompareUnitCalLog compCalLog = null; if (compCalLogId != null) {
if(compCalLogId!=null) { compCalLog = compareUnitCalLogService.findById(compCalLogId);
compCalLog = compareUnitCalLogService.findById(compCalLogId); }
} if (baseIndValueMsg.getIsFinish() == 0) {
if(baseIndValueMsg.getIsFinish()==0) { //日志填充
//日志填充
if(compCalLog!=null) { if (compCalLog != null) {
// String logInfo = compCalLog.getLogInfo(); // String logInfo = compCalLog.getLogInfo();
// compCalLog.setStatus(0); // compCalLog.setStatus(0);
// if(StringUtils.isNotBlank(logInfo)) { // if(StringUtils.isNotBlank(logInfo)) {
...@@ -159,33 +165,34 @@ public class DriveIndIdObjCalActor extends AbstractActor{ ...@@ -159,33 +165,34 @@ public class DriveIndIdObjCalActor extends AbstractActor{
// }else { // }else {
// compCalLog.setLogInfo(baseIndValueMsg.getConfirmMessage()+"</n>"); // compCalLog.setLogInfo(baseIndValueMsg.getConfirmMessage()+"</n>");
// } // }
compCalLog.setLogInfo("运算失败:指标为空"); compCalLog.setStatus(0);
compCalLog.setLogInfo("运算过程:有指标为空");
}
logger.info("日志信息::{},日志id{}", baseIndValueMsg.getConfirmMessage(), compCalLogId);
} }
logger.info("日志信息::{},日志id{}",baseIndValueMsg.getConfirmMessage(),compCalLogId); String indValue = baseIndValueMsg.getValue();
} //如果指标值返回空值
String indValue = baseIndValueMsg.getValue(); if (StringUtils.isBlank(indValue)) {
//如果指标值返回空值 indValue = "0.00";
if(StringUtils.isBlank(indValue)) {
indValue="0.00";
}
try {
if(indValue.indexOf(".")<0) {
indValue += ".00";
} }
driveIndFormula = driveIndFormula.replace("["+baseIndValueMsg.getIndId()+"]", try {
indValue); if (indValue.indexOf(".") < 0) {
//替换公式中的基础指标id为确定指标值 indValue += ".00";
//env.put(baseIndValueMsg.getIndId(), Double.valueOf(indValue)); }
}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();
//运算失败 logger.error("driveIndId:" + driveIndId + ";" +
if(compCalLog!=null){ "formula:" + driveIndFormula + ";" +
compCalLog.setStatus(0); "errorValue:" + indValue + ";" + "paramEnv:" + env);
//String logInfo = compCalLog.getLogInfo(); //日志记录
//运算失败
if (compCalLog != null) {
compCalLog.setStatus(0);
//String logInfo = compCalLog.getLogInfo();
// if(StringUtils.isNotBlank(logInfo)) { // if(StringUtils.isNotBlank(logInfo)) {
// logInfo+="替换公式值出错:driveIndId:"+driveIndId+";"+ // logInfo+="替换公式值出错:driveIndId:"+driveIndId+";"+
// "formula:"+driveIndFormula+";"+ // "formula:"+driveIndFormula+";"+
...@@ -196,71 +203,71 @@ public class DriveIndIdObjCalActor extends AbstractActor{ ...@@ -196,71 +203,71 @@ public class DriveIndIdObjCalActor extends AbstractActor{
// "formula:"+driveIndFormula+";"+ // "formula:"+driveIndFormula+";"+
// "errorValue:"+indValue+";"+"paramEnv:"+env+"</n>"); // "errorValue:"+indValue+";"+"paramEnv:"+env+"</n>");
// } // }
compCalLog.setLogInfo("运算公式出错"); compCalLog.setLogInfo("运算公式出错");
//保存日志 //保存日志
compareUnitCalLogService.saveOrUndate(compCalLog); compareUnitCalLogService.saveOrUndate(compCalLog);
} }
} }
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)));
}
if("0".equals(isTest)) {//试运行
//判断结果表中是否已存在该结果数据,存在则覆盖
TestDriveIndCalResultDef driveIndCalResult = testDriveIndCalResultService.
findCalResultDataIsExist(compareId, compareObj, driveIndId, date, code);
if(driveIndCalResult==null) {
driveIndCalResult = new TestDriveIndCalResultDef(compareId,
driveIndId,compareObj,date,driveIndValue,unit,
"1","1","admin",code,baseIndValueMsg.getCompareObjDesc());
}else {
driveIndCalResult.setCode(code);
driveIndCalResult.setUnit(unit);
driveIndCalResult.setValue(driveIndValue);
driveIndCalResult.setLastUpdateTime(DateUtils.formatDate(new Date(), "yyyy-MM-dd HH:mm:ss"));
} }
//保存进考核指标结果表中 if ("0".equals(isTest)) {//试运行
testDriveIndCalResultService.saveOrUpdate(driveIndCalResult); //判断结果表中是否已存在该结果数据,存在则覆盖
//返回指标值回去算平均值和排名 TestDriveIndCalResultDef driveIndCalResult = testDriveIndCalResultService.
CalIndAverageAndRankMsg driveIndAverageAndRankMsg = findCalResultDataIsExist(compareId, compareObj, driveIndId, date, code);
new CalIndAverageAndRankMsg(driveIndCalResult.getId(), if (driveIndCalResult == null) {
compareId,driveIndId,compareObj,date,driveIndValue, driveIndCalResult = new TestDriveIndCalResultDef(compareId,
unit,indType,scoreCardId,averageDriveIndFormula,compCalLogId); driveIndId, compareObj, date, driveIndValue, unit,
driveIndIdCalActor.tell(driveIndAverageAndRankMsg,ActorRef.noSender()); "1", "1", "admin", code, baseIndValueMsg.getCompareObjDesc());
}else { } else {
//判断结果表中是否已存在该结果数据,存在则覆盖 driveIndCalResult.setCode(code);
DriveIndCalResultDef driveIndCalResult = driveIndCalResultService. driveIndCalResult.setUnit(unit);
findCalResultDataIsExist(compareId, compareObj, driveIndId, date, code); driveIndCalResult.setValue(driveIndValue);
if(driveIndCalResult==null) { driveIndCalResult.setLastUpdateTime(DateUtils.formatDate(new Date(), "yyyy-MM-dd HH:mm:ss"));
driveIndCalResult = new DriveIndCalResultDef(compareId, }
driveIndId,compareObj,date,driveIndValue,unit, //保存进考核指标结果表中
"1","1","admin",code,baseIndValueMsg.getCompareObjDesc()); testDriveIndCalResultService.saveOrUpdate(driveIndCalResult);
}else { //返回指标值回去算平均值和排名
driveIndCalResult.setCode(code); CalIndAverageAndRankMsg driveIndAverageAndRankMsg =
driveIndCalResult.setUnit(unit); new CalIndAverageAndRankMsg(driveIndCalResult.getId(),
driveIndCalResult.setValue(driveIndValue); compareId, driveIndId, compareObj, date, driveIndValue,
driveIndCalResult.setLastUpdateTime(DateUtils.formatDate(new Date(), "yyyy-MM-dd HH:mm:ss")); unit, indType, scoreCardId, averageDriveIndFormula, compCalLogId);
driveIndIdCalActor.tell(driveIndAverageAndRankMsg, ActorRef.noSender());
} else {
//判断结果表中是否已存在该结果数据,存在则覆盖
DriveIndCalResultDef driveIndCalResult = driveIndCalResultService.
findCalResultDataIsExist(compareId, compareObj, driveIndId, date, code);
if (driveIndCalResult == null) {
driveIndCalResult = new DriveIndCalResultDef(compareId,
driveIndId, compareObj, date, driveIndValue, unit,
"1", "1", "admin", code, baseIndValueMsg.getCompareObjDesc());
} else {
driveIndCalResult.setCode(code);
driveIndCalResult.setUnit(unit);
driveIndCalResult.setValue(driveIndValue);
driveIndCalResult.setLastUpdateTime(DateUtils.formatDate(new Date(), "yyyy-MM-dd HH:mm:ss"));
}
//保存进考核指标结果表中
driveIndCalResultService.saveOrUpdate(driveIndCalResult);
//返回指标值回去算平均值和排名
CalIndAverageAndRankMsg driveIndAverageAndRankMsg =
new CalIndAverageAndRankMsg(driveIndCalResult.getId(),
compareId, driveIndId, compareObj, date, driveIndValue,
unit, indType, scoreCardId, averageDriveIndFormula, compCalLogId);
driveIndIdCalActor.tell(driveIndAverageAndRankMsg, ActorRef.noSender());
} }
//保存进考核指标结果表中 } catch (Exception e) {
driveIndCalResultService.saveOrUpdate(driveIndCalResult); //判断结果表中是否已存在该结果数据,存在则覆盖
//返回指标值回去算平均值和排名
CalIndAverageAndRankMsg driveIndAverageAndRankMsg =
new CalIndAverageAndRankMsg(driveIndCalResult.getId(),
compareId,driveIndId,compareObj,date,driveIndValue,
unit,indType,scoreCardId,averageDriveIndFormula,compCalLogId);
driveIndIdCalActor.tell(driveIndAverageAndRankMsg,ActorRef.noSender());
}
} 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) {
...@@ -274,10 +281,10 @@ public class DriveIndIdObjCalActor extends AbstractActor{ ...@@ -274,10 +281,10 @@ public class DriveIndIdObjCalActor extends AbstractActor{
// 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);
logger.error("driveIndId:"+driveIndId+";"+ logger.error("driveIndId:" + driveIndId + ";" +
"paramEnv:"+env+";formula:"+driveIndFormula); "paramEnv:" + env + ";formula:" + driveIndFormula);
//日志记录 //日志记录
// String logInfo = compCalLog.getLogInfo(); // String logInfo = compCalLog.getLogInfo();
// if(StringUtils.isNotBlank(logInfo)) { // if(StringUtils.isNotBlank(logInfo)) {
// logInfo+="计算考核指标出错:driveIndId:"+driveIndId+";"+ // logInfo+="计算考核指标出错:driveIndId:"+driveIndId+";"+
...@@ -288,33 +295,45 @@ public class DriveIndIdObjCalActor extends AbstractActor{ ...@@ -288,33 +295,45 @@ public class DriveIndIdObjCalActor extends AbstractActor{
// "paramEnv:"+env+";formula:"+driveIndFormula+"</n>"); // "paramEnv:"+env+";formula:"+driveIndFormula+"</n>");
// } // }
//保存日志
if (compCalLog != null) {
compCalLog.setLogInfo("计算考核指标出错");
compCalLog.setStatus(0);
compareUnitCalLogService.saveOrUndate(compCalLog);
}
//表示计算错误,不生成考核结果
CalIndAverageAndRankMsg driveIndAverageAndRankMsg =
new CalIndAverageAndRankMsg(-1,
compareId, driveIndId, compareObj, date, "NaN",
unit, indType, scoreCardId, averageDriveIndFormula, compCalLogId);
driveIndIdCalActor.tell(driveIndAverageAndRankMsg, ActorRef.noSender());
}
} else {
//返回考核指标因为考核指标公式中的数据项不存在而导致的计算错误标识
//保存日志 //保存日志
if(compCalLog!=null) { if (compCalLog != null) {
compCalLog.setLogInfo("计算考核指标出错");
compCalLog.setStatus(0);
compareUnitCalLogService.saveOrUndate(compCalLog); compareUnitCalLogService.saveOrUndate(compCalLog);
} }
//表示计算错误,不生成考核结果 CalIndAverageAndRankMsg driveIndAverageAndRankMsg =
CalIndAverageAndRankMsg driveIndAverageAndRankMsg =
new CalIndAverageAndRankMsg(-1, 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 {
//返回考核指标因为考核指标公式中的数据项不存在而导致的计算错误标识
//保存日志
if(compCalLog!=null) {
compareUnitCalLogService.saveOrUndate(compCalLog);
}
CalIndAverageAndRankMsg driveIndAverageAndRankMsg =
new CalIndAverageAndRankMsg(-1,
compareId,driveIndId,compareObj,date,"NaN",
unit,indType,scoreCardId,averageDriveIndFormula,compCalLogId);
driveIndIdCalActor.tell(driveIndAverageAndRankMsg,ActorRef.noSender());
} }
} })
}) .build();
.build(); }catch (Exception e){
e.printStackTrace();
CompareUnitCalLog compCalLog = compareUnitCalLogService.findById(compCalLogId);
if(compCalLog!=null){
compCalLog.setEndTime(System.currentTimeMillis()+"");
compCalLog.setRunStatus("1");
compCalLog.setStatus(0);
compCalLog.setLogInfo("运算失败");
compareUnitCalLogService.saveOrUndate(compCalLog);
}
}
return receive;
} }
} }
...@@ -4,6 +4,8 @@ import java.util.Map; ...@@ -4,6 +4,8 @@ import java.util.Map;
import com.keymobile.indicators.akka.message.indicators.BaseIndValueMsg; import com.keymobile.indicators.akka.message.indicators.BaseIndValueMsg;
import com.keymobile.indicators.akka.message.indicators.GetBaseIndValueMsg; import com.keymobile.indicators.akka.message.indicators.GetBaseIndValueMsg;
import com.keymobile.indicators.model.entity.indicators.CompareUnitCalLog;
import com.keymobile.indicators.service.hytobacco.CompareUnitCalLogService;
import com.keymobile.indicators.service.hytobacco.IndicatorsValueService; import com.keymobile.indicators.service.hytobacco.IndicatorsValueService;
import com.keymobile.indicators.utils.SpringUtil; import com.keymobile.indicators.utils.SpringUtil;
...@@ -13,37 +15,60 @@ public class GetBaseIndValueActor extends AbstractActor{ ...@@ -13,37 +15,60 @@ public class GetBaseIndValueActor extends AbstractActor{
private IndicatorsValueService indicatorsValueService = SpringUtil.getBean(IndicatorsValueService.class); private IndicatorsValueService indicatorsValueService = SpringUtil.getBean(IndicatorsValueService.class);
private CompareUnitCalLogService compareUnitCalLogService = SpringUtil.getBean(CompareUnitCalLogService.class);
private Integer compCalLogId = null;
@Override @Override
public Receive createReceive() { public Receive createReceive() {
return receiveBuilder()
.match(GetBaseIndValueMsg.class,getBaseIndValueMsg -> { Receive receive = null;
//根据维度值和基础指标id获取指标值 try {
Map<String,Object> indValueMap = indicatorsValueService.getIndicatorsValue(
getBaseIndValueMsg.getIndId(), getBaseIndValueMsg.getDimValue(), receive= receiveBuilder()
getBaseIndValueMsg.getCode()); .match(GetBaseIndValueMsg.class, getBaseIndValueMsg -> {
if(indValueMap!=null) { //根据维度值和基础指标id获取指标值
if(indValueMap.get("value")==null) {//如果指标值为空,返回失败结果 compCalLogId = getBaseIndValueMsg.getCompCalLogId();
Map<String, Object> indValueMap = indicatorsValueService.getIndicatorsValue(
getBaseIndValueMsg.getIndId(), getBaseIndValueMsg.getDimValue(),
getBaseIndValueMsg.getCode());
if (indValueMap != null) {
if (indValueMap.get("value") == null) {//如果指标值为空,返回失败结果
//返回指标值结果
getSender().tell(new BaseIndValueMsg(getBaseIndValueMsg.getIndId()
, null, indValueMap.get("compareObjDesc").toString(), 0,
"获取指标id:" +
getBaseIndValueMsg.getIndId() + ";维度:" +
getBaseIndValueMsg.getDimValue().get(0).getDimvalue() + "," +
getBaseIndValueMsg.getDimValue().get(1).getDimvalue() + " 的指标值为空;"), getSelf());
} else {
getSender().tell(new BaseIndValueMsg(getBaseIndValueMsg.getIndId()
, indValueMap.get("value").toString(),
indValueMap.get("compareObjDesc").toString(), 1, ""), getSelf());
}
} else {
//返回指标值结果 //返回指标值结果
getSender().tell(new BaseIndValueMsg(getBaseIndValueMsg.getIndId() getSender().tell(new BaseIndValueMsg(getBaseIndValueMsg.getIndId(), null, null,
,null,indValueMap.get("compareObjDesc").toString(),0, 0, "无法获取指标id:" +
"获取指标id:"+ getBaseIndValueMsg.getIndId() + ";维度:" +
getBaseIndValueMsg.getIndId()+";维度:"+ getBaseIndValueMsg.getDimValue().get(0).getDimvalue() + "," +
getBaseIndValueMsg.getDimValue().get(0).getDimvalue()+","+ getBaseIndValueMsg.getDimValue().get(1).getDimvalue() + " 的指标值;"), getSelf());
getBaseIndValueMsg.getDimValue().get(1).getDimvalue()+" 的指标值为空;"),getSelf());
}else {
getSender().tell(new BaseIndValueMsg(getBaseIndValueMsg.getIndId()
,indValueMap.get("value").toString(),
indValueMap.get("compareObjDesc").toString(),1,""),getSelf());
} }
}else { })
//返回指标值结果 .build();
getSender().tell(new BaseIndValueMsg(getBaseIndValueMsg.getIndId(),null,null, }catch (Exception e){
0,"无法获取指标id:"+ e.printStackTrace();
getBaseIndValueMsg.getIndId()+";维度:"+
getBaseIndValueMsg.getDimValue().get(0).getDimvalue()+","+ CompareUnitCalLog compCalLog = compareUnitCalLogService.findById(compCalLogId);
getBaseIndValueMsg.getDimValue().get(1).getDimvalue()+" 的指标值;"),getSelf()); if(compCalLog!=null){
} compCalLog.setEndTime(System.currentTimeMillis()+"");
}) compCalLog.setRunStatus("1");
.build(); compCalLog.setStatus(0);
compCalLog.setLogInfo("运算失败");
compareUnitCalLogService.saveOrUndate(compCalLog);
}
}
return receive;
} }
} }
...@@ -63,156 +63,171 @@ public class StartCompareUnitCalActor extends AbstractActor{ ...@@ -63,156 +63,171 @@ public class StartCompareUnitCalActor extends AbstractActor{
@Override @Override
public Receive createReceive() { public Receive createReceive() {
return receiveBuilder() Receive receive = null;
.match(StartCompareUnitCalMsg.class,startCompareUnitCalMsg -> { try {
code = startCompareUnitCalMsg.getCode(); receive = receiveBuilder()
isTest = startCompareUnitCalMsg.getIsTest(); .match(StartCompareUnitCalMsg.class, startCompareUnitCalMsg -> {
String user = startCompareUnitCalMsg.getUser(); code = startCompareUnitCalMsg.getCode();
compCalLogId = startCompareUnitCalMsg.getCompCalLogId(); isTest = startCompareUnitCalMsg.getIsTest();
List<CompareUnitDef> compareUnitDefs = startCompareUnitCalMsg.getCompareInitDefs(); String user = startCompareUnitCalMsg.getUser();
//将对标单元进行分类,需要先执行的先开始进行对标计算 compCalLogId = startCompareUnitCalMsg.getCompCalLogId();
List<CompareUnitDef> compareUnitDefs = startCompareUnitCalMsg.getCompareInitDefs();
//将对标单元进行分类,需要先执行的先开始进行对标计算
for(CompareUnitDef unitDef : compareUnitDefs) { for (CompareUnitDef unitDef : compareUnitDefs) {
if("1".equals(unitDef.getFirstExe())) { if ("1".equals(unitDef.getFirstExe())) {
firstExeList.add(unitDef); firstExeList.add(unitDef);
}else { } else {
afterExeList.add(unitDef); afterExeList.add(unitDef);
} }
//单位评分规则不为空的对标单元加到calTypeExeList中 //单位评分规则不为空的对标单元加到calTypeExeList中
if(unitDef.getObjScoreRuleId()!=null) { if (unitDef.getObjScoreRuleId() != null) {
//ScoreRule scoreRule = scoreRuleServer.getById(unitDef.getObjScoreRuleId()); //ScoreRule scoreRule = scoreRuleServer.getById(unitDef.getObjScoreRuleId());
//if(scoreRule!=null) { //if(scoreRule!=null) {
//if(scoreRule.getCalType()!=null && !"0".equals(scoreRule.getCalType())) { //if(scoreRule.getCalType()!=null && !"0".equals(scoreRule.getCalType())) {
calTypeExeList.add(unitDef); calTypeExeList.add(unitDef);
//} //}
//} //}
} }
}
firstExeUnitSize = firstExeList.size();
afterExeUnitSize = afterExeList.size();
if(!firstExeList.isEmpty()) {
for(CompareUnitDef unitDef : firstExeList) {
CompareUnitCalMsg compareUnitCalMsg = new CompareUnitCalMsg(unitDef,
startCompareUnitCalMsg.getCode(),
startCompareUnitCalMsg.getIsTest());
//运算者
compareUnitCalMsg.setUser(user);
compareUnitCalMsg.setCompCalLogId(compCalLogId);
ActorRef compareUnitCalActor = this.getContext()
.actorOf(Props.create(CompareUnitCalActor.class,
()->new CompareUnitCalActor(getSelf())));
compareUnitCalActor.tell(compareUnitCalMsg, getSelf());
} }
}else { firstExeUnitSize = firstExeList.size();
if(!afterExeList.isEmpty()) { afterExeUnitSize = afterExeList.size();
for(CompareUnitDef unitDef : afterExeList) { if (!firstExeList.isEmpty()) {
for (CompareUnitDef unitDef : firstExeList) {
CompareUnitCalMsg compareUnitCalMsg = new CompareUnitCalMsg(unitDef, CompareUnitCalMsg compareUnitCalMsg = new CompareUnitCalMsg(unitDef,
startCompareUnitCalMsg.getCode(), startCompareUnitCalMsg.getCode(),
startCompareUnitCalMsg.getIsTest()); startCompareUnitCalMsg.getIsTest());
//运算者
compareUnitCalMsg.setUser(user);
compareUnitCalMsg.setCompCalLogId(compCalLogId); compareUnitCalMsg.setCompCalLogId(compCalLogId);
ActorRef compareUnitCalActor = this.getContext() ActorRef compareUnitCalActor = this.getContext()
.actorOf(Props.create(CompareUnitCalActor.class, .actorOf(Props.create(CompareUnitCalActor.class,
()->new CompareUnitCalActor(getSelf()))); () -> new CompareUnitCalActor(getSelf())));
compareUnitCalActor.tell(compareUnitCalMsg, getSelf()); compareUnitCalActor.tell(compareUnitCalMsg, getSelf());
} }
}else { } else {
//发送确认消息给父actor if (!afterExeList.isEmpty()) {
CurrentCompUnitExeMsg currentCompUnitExeMsg = new CurrentCompUnitExeMsg(1,""); for (CompareUnitDef unitDef : afterExeList) {
beforeCompareUnitActor.tell(currentCompUnitExeMsg, ActorRef.noSender()); CompareUnitCalMsg compareUnitCalMsg = new CompareUnitCalMsg(unitDef,
if("0".equals(isTest)) { startCompareUnitCalMsg.getCode(),
logger.info("对标单元试运行计算完成"); startCompareUnitCalMsg.getIsTest());
}else { compareUnitCalMsg.setCompCalLogId(compCalLogId);
logger.info("对标单元计算完成"); ActorRef compareUnitCalActor = this.getContext()
.actorOf(Props.create(CompareUnitCalActor.class,
() -> new CompareUnitCalActor(getSelf())));
compareUnitCalActor.tell(compareUnitCalMsg, getSelf());
}
} else {
//发送确认消息给父actor
CurrentCompUnitExeMsg currentCompUnitExeMsg = new CurrentCompUnitExeMsg(1, "");
beforeCompareUnitActor.tell(currentCompUnitExeMsg, ActorRef.noSender());
if ("0".equals(isTest)) {
logger.info("对标单元试运行计算完成");
} else {
logger.info("对标单元计算完成");
}
} }
} }
} })
}) .match(FirstExeConfirmMsg.class, firstExeConfirmMsg -> {
.match(FirstExeConfirmMsg.class, firstExeConfirmMsg -> { if (++numberOfConfirm >= firstExeUnitSize) {//全部先执行的子actor全部返回
if (++numberOfConfirm >= firstExeUnitSize) {//全部先执行的子actor全部返回 //再执行后执行的actor
//再执行后执行的actor if (!afterExeList.isEmpty()) {
if(!afterExeList.isEmpty()) { for (CompareUnitDef unitDef : afterExeList) {
for(CompareUnitDef unitDef : afterExeList) { CompareUnitCalMsg compareUnitCalMsg = new CompareUnitCalMsg(unitDef,
CompareUnitCalMsg compareUnitCalMsg = new CompareUnitCalMsg(unitDef, code, isTest);
code,isTest); compareUnitCalMsg.setCompCalLogId(compCalLogId);
compareUnitCalMsg.setCompCalLogId(compCalLogId); ActorRef compareUnitCalActor = this.getContext()
ActorRef compareUnitCalActor = this.getContext() .actorOf(Props.create(CompareUnitCalActor.class,
.actorOf(Props.create(CompareUnitCalActor.class, () -> new CompareUnitCalActor(getSelf())));
()->new CompareUnitCalActor(getSelf()))); compareUnitCalActor.tell(compareUnitCalMsg, getSelf());
compareUnitCalActor.tell(compareUnitCalMsg, getSelf()); }
} if ("0".equals(isTest)) {
if("0".equals(isTest)) { logger.info("进行后执行对标单元试运行计算....");
logger.info("进行后执行对标单元试运行计算...."); } else {
}else { logger.info("进行后执行对标单元计算....");
logger.info("进行后执行对标单元计算...."); }
} else {
if (!calTypeExeList.isEmpty()) {
if ("0".equals(isTest)) {
logger.info("计算试运行对标单元单位评分......");
} else {
logger.info("计算对标单元单位评分......");
}
for (CompareUnitDef unitDef : calTypeExeList) {
//试运行
if ("0".equals(isTest)) {
testScoreRuleServer.testCalObjScore(unitDef.getCompareId(),
Arrays.asList(unitDef.getIndIds().split(",")),
Arrays.asList(unitDef.getCompareObjs().split(",")),
unitDef.getDate(), unitDef.getObjScoreRuleId(), code);
} else {
scoreRuleServer.calObjScore(unitDef.getCompareId(),
Arrays.asList(unitDef.getIndIds().split(",")),
Arrays.asList(unitDef.getCompareObjs().split(",")),
unitDef.getDate(), unitDef.getObjScoreRuleId(), code);
}
}
}
//发送确认消息给父actor
CurrentCompUnitExeMsg currentCompUnitExeMsg = new CurrentCompUnitExeMsg(1, "");
beforeCompareUnitActor.tell(currentCompUnitExeMsg, ActorRef.noSender());
if ("0".equals(isTest)) {
logger.info("对标单元试运行计算完成");
} else {
logger.info("对标单元计算完成");
}
} }
}else { }
if(!calTypeExeList.isEmpty()) { })
if("0".equals(isTest)) { .match(AfterExeConfirmMsg.class, afterExeConfirmMsg -> {
if (++numberOfAfterConfirm >= afterExeUnitSize) {//全部后执行的子actor全部返回
if (!calTypeExeList.isEmpty()) {
if ("0".equals(isTest)) {
logger.info("计算试运行对标单元单位评分......"); logger.info("计算试运行对标单元单位评分......");
}else { } else {
logger.info("计算对标单元单位评分......"); logger.info("计算对标单元单位评分......");
} }
for(CompareUnitDef unitDef : calTypeExeList) { for (CompareUnitDef unitDef : calTypeExeList) {
//试运行 //试运行
if("0".equals(isTest)) { if ("0".equals(isTest)) {
testScoreRuleServer.testCalObjScore(unitDef.getCompareId(), testScoreRuleServer.testCalObjScore(unitDef.getCompareId(),
Arrays.asList(unitDef.getIndIds().split(",")), Arrays.asList(unitDef.getIndIds().split(",")),
Arrays.asList(unitDef.getCompareObjs().split(",")), Arrays.asList(unitDef.getCompareObjs().split(",")),
unitDef.getDate(), unitDef.getObjScoreRuleId(),code); unitDef.getDate(), unitDef.getObjScoreRuleId(), code);
}else { } else {
scoreRuleServer.calObjScore(unitDef.getCompareId(), scoreRuleServer.calObjScore(unitDef.getCompareId(),
Arrays.asList(unitDef.getIndIds().split(",")), Arrays.asList(unitDef.getIndIds().split(",")),
Arrays.asList(unitDef.getCompareObjs().split(",")), Arrays.asList(unitDef.getCompareObjs().split(",")),
unitDef.getDate(), unitDef.getObjScoreRuleId(),code); unitDef.getDate(), unitDef.getObjScoreRuleId(), code);
} }
} }
} }
//发送确认消息给父actor //发送确认消息给父actor
CurrentCompUnitExeMsg currentCompUnitExeMsg = new CurrentCompUnitExeMsg(1,""); CurrentCompUnitExeMsg currentCompUnitExeMsg = new CurrentCompUnitExeMsg(1, "");
beforeCompareUnitActor.tell(currentCompUnitExeMsg, ActorRef.noSender()); beforeCompareUnitActor.tell(currentCompUnitExeMsg, ActorRef.noSender());
if("0".equals(isTest)) { if ("0".equals(isTest)) {
logger.info("对标单元试运行计算完成"); logger.info("对标单元试运行计算完成");
}else { } else {
logger.info("对标单元计算完成"); logger.info("对标单元计算完成");
} }
} }
} })
}) .build();
.match(AfterExeConfirmMsg.class, afterExeConfirmMsg -> { }catch (Exception e){
if (++numberOfAfterConfirm >= afterExeUnitSize) {//全部后执行的子actor全部返回 e.printStackTrace();
if(!calTypeExeList.isEmpty()) {
if("0".equals(isTest)) { CompareUnitCalLog compCalLog = compareUnitCalLogService.findById(compCalLogId);
logger.info("计算试运行对标单元单位评分......"); if(compCalLog!=null){
}else { compCalLog.setEndTime(System.currentTimeMillis()+"");
logger.info("计算对标单元单位评分......"); compCalLog.setRunStatus("1");
} compCalLog.setStatus(0);
for(CompareUnitDef unitDef : calTypeExeList) { compCalLog.setLogInfo("运算失败");
//试运行 compareUnitCalLogService.saveOrUndate(compCalLog);
if("0".equals(isTest)) { }
testScoreRuleServer.testCalObjScore(unitDef.getCompareId(), }
Arrays.asList(unitDef.getIndIds().split(",")), return receive;
Arrays.asList(unitDef.getCompareObjs().split(",")),
unitDef.getDate(), unitDef.getObjScoreRuleId(),code);
}else {
scoreRuleServer.calObjScore(unitDef.getCompareId(),
Arrays.asList(unitDef.getIndIds().split(",")),
Arrays.asList(unitDef.getCompareObjs().split(",")),
unitDef.getDate(), unitDef.getObjScoreRuleId(),code);
}
}
}
//发送确认消息给父actor
CurrentCompUnitExeMsg currentCompUnitExeMsg = new CurrentCompUnitExeMsg(1,"");
beforeCompareUnitActor.tell(currentCompUnitExeMsg, ActorRef.noSender());
if("0".equals(isTest)) {
logger.info("对标单元试运行计算完成");
}else {
logger.info("对标单元计算完成");
}
}
})
.build();
} }
} }
...@@ -17,13 +17,23 @@ public class GetBaseIndValueMsg implements Serializable{ ...@@ -17,13 +17,23 @@ public class GetBaseIndValueMsg implements Serializable{
private List<DimValue> dimValue = new ArrayList<>();//维度值 private List<DimValue> dimValue = new ArrayList<>();//维度值
private String code; private String code;
private Integer compCalLogId;
public GetBaseIndValueMsg(String indId,List<DimValue> dimValue,String code) { public GetBaseIndValueMsg(String indId,List<DimValue> dimValue,String code) {
this.indId = indId; this.indId = indId;
this.dimValue.addAll(dimValue); this.dimValue.addAll(dimValue);
this.code = code; this.code = code;
} }
public Integer getCompCalLogId() {
return compCalLogId;
}
public void setCompCalLogId(Integer compCalLogId) {
this.compCalLogId = compCalLogId;
}
public List<DimValue> getDimValue() { public List<DimValue> getDimValue() {
return dimValue; return dimValue;
} }
......
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