Commit 86948289 by zhangkb

添加指标计算日志保存逻辑

parent a9b75035
......@@ -12,7 +12,9 @@ import com.keymobile.indicators.akka.message.indicators.AfterExeConfirmMsg;
import com.keymobile.indicators.akka.message.indicators.CompareUnitCalMsg;
import com.keymobile.indicators.akka.message.indicators.DriveIndIdCalMsg;
import com.keymobile.indicators.akka.message.indicators.FirstExeConfirmMsg;
import com.keymobile.indicators.model.entity.indicators.CompareUnitCalLog;
import com.keymobile.indicators.model.entity.indicators.CompareUnitDef;
import com.keymobile.indicators.service.hytobacco.CompareUnitCalLogService;
import com.keymobile.indicators.service.hytobacco.ScoreRuleService;
import com.keymobile.indicators.utils.SpringUtil;
......@@ -25,6 +27,8 @@ public class CompareUnitCalActor extends AbstractActor{
private ScoreRuleService scoreRuleServer = SpringUtil.getBean(ScoreRuleService.class);
private CompareUnitCalLogService compareUnitCalLogService = SpringUtil.getBean(CompareUnitCalLogService.class);
private int numberOfConfirm = 0;//定义返回确认消息的子actor
private int indIdSize = 0;//对标指标个数
......@@ -63,6 +67,13 @@ public class CompareUnitCalActor extends AbstractActor{
firstExe = compareUnitDef.getFirstExe();
averageObj = compareUnitDef.getAverageObj();
objScoreRuleId = compareUnitDef.getObjScoreRuleId();
//新增运行日志记录
CompareUnitCalLog compCalLog = new CompareUnitCalLog(compareId,date,
System.currentTimeMillis()+"","0");
//保存
Integer compCalLogId = compareUnitCalLogService.saveOrUndate(compCalLog);
//获取对标对象
String compareObjsString = compareUnitDef.getCompareObjs();
//获取对标指标
......@@ -77,7 +88,7 @@ public class CompareUnitCalActor extends AbstractActor{
for(String indId : indIdsList) {
DriveIndIdCalMsg driveIndIdCalMsg = new DriveIndIdCalMsg(
compareUnitDef.getCompareId(),indId,compareObjsList,compareUnitDef.getDate(),
firstExe,averageObj);
firstExe,averageObj,compCalLogId);
//start akka
ActorRef driveIndIdCalActor = this.getContext()
.actorOf(Props.create(DriveIndIdCalActor.class,
......@@ -88,8 +99,18 @@ public class CompareUnitCalActor extends AbstractActor{
})
.match(FirstExeConfirmMsg.class, firstExeConfirmMsg -> {
if (++numberOfConfirm >= indIdSize) {//子actor全部返回
Integer compCalLogId = firstExeConfirmMsg.getCompCalLogId();
CompareUnitCalLog compCalLog = null;
if(compCalLogId!=null) {
compCalLog = compareUnitCalLogService.findById(compCalLogId);
}
//如果是先执行且没有平均分参考对象
if("1".equals(firstExe) && StringUtils.isBlank(averageObj)) {
if(compCalLog!=null) {
compCalLog.setEndTime(System.currentTimeMillis()+"");
compCalLog.setRunStatus("1");
compareUnitCalLogService.saveOrUndate(compCalLog);
}
//发送确认信息给父actor
FirstExeConfirmMsg confirmMsg = new FirstExeConfirmMsg(1,"");
startCompareUnitCalActor.tell(confirmMsg, ActorRef.noSender());
......@@ -99,6 +120,12 @@ public class CompareUnitCalActor extends AbstractActor{
scoreRuleServer.calObjScore(compareId, indIdsList, compareObjsList,
date, objScoreRuleId);
}
//记录日志
if(compCalLog!=null) {
compCalLog.setEndTime(System.currentTimeMillis()+"");
compCalLog.setRunStatus("1");
compareUnitCalLogService.saveOrUndate(compCalLog);
}
//发送后执行的确认消息给父actor
AfterExeConfirmMsg afterConfirmMsg = new AfterExeConfirmMsg(1,"");
startCompareUnitCalActor.tell(afterConfirmMsg, ActorRef.noSender());
......
......@@ -68,6 +68,9 @@ public class DriveIndIdCalActor extends AbstractActor{
firstExe = driveIndIdCalMsg.getFirstExe();
averageObj = driveIndIdCalMsg.getAverageObj();
compareObjSize = compareObjs.size();
//日志记录id
Integer compCalLogId = driveIndIdCalMsg.getCompCalLogId();
for(String compareObj : compareObjs) {
List<DimValue> dimValueList = new ArrayList<>();
DimValue dimCompareObj = new DimValue("dim1",compareObj,"varchar");
......@@ -76,7 +79,7 @@ public class DriveIndIdCalActor extends AbstractActor{
dimValueList.add(dimDateObj);
DriveIndIdObjCalMsg driveIndIdObjCalMsg = new DriveIndIdObjCalMsg(compareId,
indId,compareObj,date,dimValueList);
indId,compareObj,date,dimValueList,compCalLogId);
ActorRef driveIndIdObjCalActor = this.getContext()
.actorOf(Props.create(DriveIndIdObjCalActor.class,
()->new DriveIndIdObjCalActor(getSelf())));
......@@ -88,6 +91,7 @@ public class DriveIndIdCalActor extends AbstractActor{
String id = String.valueOf(calIndAverageAndRankMsg.getId());
String indType = calIndAverageAndRankMsg.getIndType();//指标类型:正向 反向
Integer scoreCardId = calIndAverageAndRankMsg.getScoreCardId();//评分卡id
Integer compCalLogId = calIndAverageAndRankMsg.getCompCalLogId();//记录日志id
if(!"-1".equals(id)) {
valueMap.put(id, value);
compareObjs.add(calIndAverageAndRankMsg.getCompareObj());
......@@ -97,7 +101,7 @@ public class DriveIndIdCalActor extends AbstractActor{
//如果是先执行且没有平均分参考对象的,则不进行平均分和排名计算
if("1".equals(firstExe) && StringUtils.isBlank(averageObj)) {
//发送确认信息给父actor
FirstExeConfirmMsg firstExeConfirmMsg = new FirstExeConfirmMsg(1,"");
FirstExeConfirmMsg firstExeConfirmMsg = new FirstExeConfirmMsg(1,"",compCalLogId);
compareUnitCalActor.tell(firstExeConfirmMsg, ActorRef.noSender());
}else {
DriveIndCalResultDef provinceDriveIndCalResult = null;
......@@ -146,12 +150,12 @@ public class DriveIndIdCalActor extends AbstractActor{
}
}
//发送确认信息给父actor
FirstExeConfirmMsg firstExeConfirmMsg = new FirstExeConfirmMsg(1,"");
FirstExeConfirmMsg firstExeConfirmMsg = new FirstExeConfirmMsg(1,"",compCalLogId);
compareUnitCalActor.tell(firstExeConfirmMsg, ActorRef.noSender());
}
}else {
//发送确认信息给父actor
FirstExeConfirmMsg firstExeConfirmMsg = new FirstExeConfirmMsg(0,"");
FirstExeConfirmMsg firstExeConfirmMsg = new FirstExeConfirmMsg(0,"",compCalLogId);
compareUnitCalActor.tell(firstExeConfirmMsg, ActorRef.noSender());
}
}
......
......@@ -18,8 +18,10 @@ import com.keymobile.indicators.akka.message.indicators.BaseIndValueMsg;
import com.keymobile.indicators.akka.message.indicators.CalIndAverageAndRankMsg;
import com.keymobile.indicators.akka.message.indicators.DriveIndIdObjCalMsg;
import com.keymobile.indicators.akka.message.indicators.GetBaseIndValueMsg;
import com.keymobile.indicators.model.entity.indicators.CompareUnitCalLog;
import com.keymobile.indicators.model.entity.indicators.DriveIndCalResultDef;
import com.keymobile.indicators.model.entity.indicators.DriveIndDef;
import com.keymobile.indicators.service.hytobacco.CompareUnitCalLogService;
import com.keymobile.indicators.service.hytobacco.DriveIndCalResultService;
import com.keymobile.indicators.service.hytobacco.DriveIndDefService;
import com.keymobile.indicators.utils.SpringUtil;
......@@ -35,6 +37,8 @@ public class DriveIndIdObjCalActor extends AbstractActor{
private DriveIndCalResultService driveIndCalResultService = SpringUtil.getBean(DriveIndCalResultService.class);
private CompareUnitCalLogService compareUnitCalLogService = SpringUtil.getBean(CompareUnitCalLogService.class);
private String compareId ;
private String compareObj;
......@@ -62,6 +66,8 @@ public class DriveIndIdObjCalActor extends AbstractActor{
//定义线程安全的收集反馈确认消息list
private List<Integer> confirmList = new CopyOnWriteArrayList<>();
private Integer compCalLogId = null;
private final ActorRef driveIndIdCalActor;//定义父actor
static public Props props(ActorRef driveIndIdCalActor) {
......@@ -80,6 +86,8 @@ public class DriveIndIdObjCalActor extends AbstractActor{
compareObj = driveIndIdObjCalMsg.getCompareObj();
date = driveIndIdObjCalMsg.getDate();
driveIndId = driveIndIdObjCalMsg.getIndId();
//日志记录id
compCalLogId = driveIndIdObjCalMsg.getCompCalLogId();
List<String> indIdList = new ArrayList<>();//定义存储从考核指标公式解析出来的基础指标id
......@@ -111,7 +119,23 @@ public class DriveIndIdObjCalActor extends AbstractActor{
}
})
.match(BaseIndValueMsg.class,baseIndValueMsg->{
//根据日志记录id获取日志
CompareUnitCalLog compCalLog = null;
if(compCalLogId!=null) {
compCalLog = compareUnitCalLogService.findById(compCalLogId);
}
if(baseIndValueMsg.getIsFinish()==0) {
//日志填充
if(compCalLog!=null) {
String logInfo = compCalLog.getLogInfo();
if(StringUtils.isNotBlank(logInfo)) {
logInfo+=baseIndValueMsg.getConfirmMessage()+"</n>";
compCalLog.setLogInfo(logInfo);
}else {
compCalLog.setLogInfo(baseIndValueMsg.getConfirmMessage()+"</n>");
}
}
logger.info(baseIndValueMsg.getConfirmMessage());
}else {
String indValue = baseIndValueMsg.getValue();
......@@ -128,6 +152,18 @@ public class DriveIndIdObjCalActor extends AbstractActor{
logger.error("driveIndId:"+driveIndId+";"+
"formula:"+driveIndFormula+";"+
"errorValue:"+indValue+";"+"paramEnv:"+env);
//日志记录
String logInfo = compCalLog.getLogInfo();
if(StringUtils.isNotBlank(logInfo)) {
logInfo+="替换公式值出错:driveIndId:"+driveIndId+";"+
"formula:"+driveIndFormula+";"+
"errorValue:"+indValue+";"+"paramEnv:"+env+"</n>";
compCalLog.setLogInfo(logInfo);
}else {
compCalLog.setLogInfo("替换公式值出错:driveIndId:"+driveIndId+";"+
"formula:"+driveIndFormula+";"+
"errorValue:"+indValue+";"+"paramEnv:"+env+"</n>");
}
}
confirmList.add(baseIndValueMsg.getIsFinish());
if (++numberOfConfirm >= indIdSize) {//子actor全部返回
......@@ -157,7 +193,7 @@ public class DriveIndIdObjCalActor extends AbstractActor{
CalIndAverageAndRankMsg driveIndAverageAndRankMsg =
new CalIndAverageAndRankMsg(driveIndCalResult.getId(),
compareId,driveIndId,compareObj,date,driveIndValue,
unit,indType,scoreCardId,averageDriveIndFormula);
unit,indType,scoreCardId,averageDriveIndFormula,compCalLogId);
driveIndIdCalActor.tell(driveIndAverageAndRankMsg,ActorRef.noSender());
} catch (Exception e) {
//判断结果表中是否已存在该结果数据,存在则覆盖
......@@ -171,24 +207,40 @@ public class DriveIndIdObjCalActor extends AbstractActor{
driveIndCalResult.setValue("NaN");
}
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(driveIndCalResult.getId(),
compareId,driveIndId,compareObj,date,"NaN",
unit,indType,scoreCardId,averageDriveIndFormula);
unit,indType,scoreCardId,averageDriveIndFormula,compCalLogId);
driveIndIdCalActor.tell(driveIndAverageAndRankMsg,ActorRef.noSender());
logger.error("driveIndId:"+driveIndId+";"+
"paramEnv:"+env+";formula:"+driveIndFormula);
}
}else {
//返回考核指标因为考核指标公式中的数据项不存在而导致的计算错误标识
CalIndAverageAndRankMsg driveIndAverageAndRankMsg =
new CalIndAverageAndRankMsg(-1,
compareId,driveIndId,compareObj,date,"NaN",
unit,indType,scoreCardId,averageDriveIndFormula);
unit,indType,scoreCardId,averageDriveIndFormula,compCalLogId);
driveIndIdCalActor.tell(driveIndAverageAndRankMsg,ActorRef.noSender());
}
}
}
//保存日志
if(compCalLog!=null) {
compareUnitCalLogService.saveOrUndate(compCalLog);
}
})
.build();
}
......
......@@ -10,6 +10,7 @@ import com.keymobile.indicators.akka.message.indicators.AfterExeConfirmMsg;
import com.keymobile.indicators.akka.message.indicators.CompareUnitCalMsg;
import com.keymobile.indicators.akka.message.indicators.FirstExeConfirmMsg;
import com.keymobile.indicators.akka.message.indicators.StartCompareUnitCalMsg;
import com.keymobile.indicators.model.entity.indicators.CompareUnitCalLog;
import com.keymobile.indicators.model.entity.indicators.CompareUnitDef;
import akka.actor.AbstractActor;
......
......@@ -12,12 +12,20 @@ public class AfterExeConfirmMsg implements Serializable{
private Integer isFinish;
//日志报告
private String confirmMessage;
//日志记录id
private Integer compCalLogId;
public AfterExeConfirmMsg(Integer isFinish,String confirmMessage) {
this.isFinish = isFinish;
this.confirmMessage = confirmMessage;
}
public AfterExeConfirmMsg(Integer isFinish,String confirmMessage,Integer compCalLogId) {
this.isFinish = isFinish;
this.confirmMessage = confirmMessage;
this.compCalLogId = compCalLogId;
}
public Integer getIsFinish() {
return isFinish;
}
......@@ -30,4 +38,12 @@ public class AfterExeConfirmMsg implements Serializable{
public void setConfirmMessage(String confirmMessage) {
this.confirmMessage = confirmMessage;
}
public Integer getCompCalLogId() {
return compCalLogId;
}
public void setCompCalLogId(Integer compCalLogId) {
this.compCalLogId = compCalLogId;
}
}
......@@ -18,9 +18,11 @@ public class CalIndAverageAndRankMsg implements Serializable{
private String indType;
private Integer scoreCardId;
private String indFormula;
private Integer compCalLogId;
public CalIndAverageAndRankMsg(Integer id,String compareId,String driveIndId,String compareObj,
Integer date,String driveIndValue,String unit,String indType,Integer scoreCardId,String indFormula) {
Integer date,String driveIndValue,String unit,String indType,Integer scoreCardId,
String indFormula,Integer compCalLogId) {
this.id = id;
this.compareId = compareId;
this.driveIndId = driveIndId;
......@@ -31,6 +33,7 @@ public class CalIndAverageAndRankMsg implements Serializable{
this.indType = indType;
this.scoreCardId = scoreCardId;
this.indFormula = indFormula;
this.compCalLogId = compCalLogId;
}
public Integer getId() {
......@@ -93,4 +96,12 @@ public class CalIndAverageAndRankMsg implements Serializable{
public void setIndFormula(String indFormula) {
this.indFormula = indFormula;
}
public Integer getCompCalLogId() {
return compCalLogId;
}
public void setCompCalLogId(Integer compCalLogId) {
this.compCalLogId = compCalLogId;
}
}
......@@ -16,15 +16,17 @@ public class DriveIndIdCalMsg implements Serializable{
private Integer date;
private String firstExe;
private String averageObj;//平均分参考对象
private Integer compCalLogId;//运行日志记录id
public DriveIndIdCalMsg(String compareId,String indId,List<String> compareObj,Integer date,
String firstExe,String averageObj) {
String firstExe,String averageObj,Integer compCalLogId) {
this.compareId = compareId;
this.indId = indId;
this.compareObj.addAll(compareObj);
this.date = date;
this.firstExe = firstExe;
this.averageObj = averageObj;
this.compCalLogId = compCalLogId;
}
public String getCompareId() {
......@@ -64,4 +66,12 @@ public class DriveIndIdCalMsg implements Serializable{
public void setFirstExe(String firstExe) {
this.firstExe = firstExe;
}
public Integer getCompCalLogId() {
return compCalLogId;
}
public void setCompCalLogId(Integer compCalLogId) {
this.compCalLogId = compCalLogId;
}
}
......@@ -17,14 +17,16 @@ public class DriveIndIdObjCalMsg implements Serializable{
private String compareObj;
private Integer date;
private List<DimValue> dimValues = new ArrayList<>();//维度值list
private Integer compCalLogId;//运行日志记录id
public DriveIndIdObjCalMsg(String compareId,String indId,String compareObj,
Integer date,List<DimValue> dimValues) {
Integer date,List<DimValue> dimValues,Integer compCalLogId) {
this.compareId = compareId;
this.indId = indId;
this.compareObj = compareObj;
this.date = date;
this.dimValues.addAll(dimValues);
this.compCalLogId = compCalLogId;
}
public String getCompareId() {
......@@ -57,4 +59,12 @@ public class DriveIndIdObjCalMsg implements Serializable{
public void setDimValues(List<DimValue> dimValues) {
this.dimValues.addAll(dimValues);
}
public Integer getCompCalLogId() {
return compCalLogId;
}
public void setCompCalLogId(Integer compCalLogId) {
this.compCalLogId = compCalLogId;
}
}
......@@ -12,12 +12,20 @@ public class FirstExeConfirmMsg implements Serializable{
private Integer isFinish;
//日志报告
private String confirmMessage;
//日志记录id
private Integer compCalLogId;
public FirstExeConfirmMsg(Integer isFinish,String confirmMessage) {
this.isFinish = isFinish;
this.confirmMessage = confirmMessage;
}
public FirstExeConfirmMsg(Integer isFinish,String confirmMessage,Integer compCalLogId) {
this.isFinish = isFinish;
this.confirmMessage = confirmMessage;
this.compCalLogId = compCalLogId;
}
public Integer getIsFinish() {
return isFinish;
}
......@@ -30,4 +38,12 @@ public class FirstExeConfirmMsg implements Serializable{
public void setConfirmMessage(String confirmMessage) {
this.confirmMessage = confirmMessage;
}
public Integer getCompCalLogId() {
return compCalLogId;
}
public void setCompCalLogId(Integer compCalLogId) {
this.compCalLogId = compCalLogId;
}
}
package com.keymobile.indicators.model.entity.indicators;
import java.util.Date;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import com.keymobile.indicators.utils.DateUtils;
import lombok.Data;
/**
* author:zhangkb time:2020-6-29 desc:对标单元计算日志表
*/
@Data
@Table(name="compare_unit_cal_log")
public class CompareUnitCalLog {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String compareId;
private Integer date;
private String creater;
private String createTime = DateUtils.formatDate(new Date(), "yyyy-MM-dd HH:mm:ss");
private String logInfo;
private String startTime;
private String endTime;
private String runStatus;//0:运行中 1:运行完成
public CompareUnitCalLog(String compareId,Integer date,String startTime,String runStatus) {
this.compareId = compareId;
this.date = date;
this.startTime = startTime;
this.runStatus = runStatus;
}
}
package com.keymobile.indicators.model.mapper.indmapper;
import org.apache.ibatis.annotations.Mapper;
import com.keymobile.indicators.model.entity.indicators.CompareUnitCalLog;
import tk.mybatis.mapper.common.BaseMapper;
@Mapper
public interface CompareUnitCalLogMapper extends BaseMapper<CompareUnitCalLog>{
}
package com.keymobile.indicators.service.hytobacco;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.keymobile.indicators.model.entity.indicators.CompareUnitCalLog;
import com.keymobile.indicators.model.mapper.indmapper.CompareUnitCalLogMapper;
@Service
public class CompareUnitCalLogService {
private Logger logger = LoggerFactory.getLogger(CompareUnitCalLogService.class);
@Autowired
private CompareUnitCalLogMapper compareUnitCalLogMapper;
public Integer saveOrUndate(CompareUnitCalLog compareUnitCalLog) {
if(compareUnitCalLog.getId()==null) {
compareUnitCalLogMapper.insert(compareUnitCalLog);
}else {
compareUnitCalLogMapper.updateByPrimaryKey(compareUnitCalLog);
}
return compareUnitCalLog.getId();
}
public CompareUnitCalLog findById(Integer id) {
return compareUnitCalLogMapper.selectByPrimaryKey(id);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.keymobile.indicators.model.mapper.indmapper.CompareUnitCalLogMapper">
</mapper>
\ No newline at end of file
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