Commit 0d97c453 by zhangkb

修改对标计算逻辑,先计算同期,再计算本期

parent 672c2c97
package com.keymobile.indicators.akka.actor.indicators;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.keymobile.indicators.akka.message.indicators.CurrentCompUnitExeMsg;
import com.keymobile.indicators.akka.message.indicators.StartCompareUnitCalMsg;
import com.keymobile.indicators.model.entity.indicators.CompareUnitDef;
import akka.actor.AbstractActor;
import akka.actor.ActorRef;
import akka.actor.Props;
public class BeforeCompareUnitCalActor extends AbstractActor{
private Logger logger = LoggerFactory.getLogger(BeforeCompareUnitCalActor.class);
private int numberOfConfirm = 0;//定义返回确认消息的子actor
private int sameExeSize = 1;//定义执行同期对标单元计算个数,通常默认只有一个
private List<CompareUnitDef> sameCompareUnitDef = new ArrayList<>();
@Override
public Receive createReceive() {
return receiveBuilder()
.match(StartCompareUnitCalMsg.class,beforeCompareUnitCalMsg -> {
List<CompareUnitDef> compareUnitDefs = beforeCompareUnitCalMsg.getCompareInitDefs();
sameCompareUnitDef.addAll(compareUnitDefs);
logger.info("进行date:"+compareUnitDefs.get(0).getDate()+" 的对标单元计算.....");
//计算同期对标单元
StartCompareUnitCalMsg startCompareUnitCalMsg = new StartCompareUnitCalMsg(compareUnitDefs);
ActorRef startCompareUnitCalActor = this.getContext().actorOf(Props.create(
StartCompareUnitCalActor.class,()-> new StartCompareUnitCalActor(getSelf())));
startCompareUnitCalActor.tell(startCompareUnitCalMsg, getSelf());
})
.match(CurrentCompUnitExeMsg.class,currentCompUnitExeMsg -> {
if (++numberOfConfirm >= sameExeSize) {//全部先执行的子actor全部返回
if(numberOfConfirm==1) {
//执行本期对标单元计算
List<CompareUnitDef> currentCompareUnitDef = new ArrayList<>();
for(CompareUnitDef unitDef : sameCompareUnitDef) {
Integer date = unitDef.getDate()+100;//修改对标时间为本期
unitDef.setDate(date);
currentCompareUnitDef.add(unitDef);
}
if(!currentCompareUnitDef.isEmpty()) {
logger.info("进行date:"+currentCompareUnitDef.get(0).getDate()+" 的对标单元计算.....");
//计算同期对标单元
StartCompareUnitCalMsg startCompareUnitCalMsg = new StartCompareUnitCalMsg(currentCompareUnitDef);
ActorRef startCompareUnitCalActor = this.getContext().actorOf(Props.create(
StartCompareUnitCalActor.class,()-> new StartCompareUnitCalActor(getSelf())));
startCompareUnitCalActor.tell(startCompareUnitCalMsg, getSelf());
}
}
if(numberOfConfirm>1) {
logger.info("本期同期对标单元计算完成");
}
}
})
.build();
}
}
......@@ -9,6 +9,7 @@ import org.slf4j.LoggerFactory;
import com.keymobile.indicators.akka.message.indicators.AfterExeConfirmMsg;
import com.keymobile.indicators.akka.message.indicators.CompareUnitCalMsg;
import com.keymobile.indicators.akka.message.indicators.CurrentCompUnitExeMsg;
import com.keymobile.indicators.akka.message.indicators.FirstExeConfirmMsg;
import com.keymobile.indicators.akka.message.indicators.StartCompareUnitCalMsg;
import com.keymobile.indicators.model.entity.indicators.CompareUnitDef;
......@@ -39,6 +40,16 @@ public class StartCompareUnitCalActor extends AbstractActor{
private List<CompareUnitDef> calTypeExeList = new ArrayList<>();//存储对标单元单位评分规则calType不为0的对标单元list
private final ActorRef beforeCompareUnitActor;//定义父actor
static public Props props(ActorRef beforeCompareUnitActor) {
return Props.create(StartCompareUnitCalActor.class,()->new StartCompareUnitCalActor(beforeCompareUnitActor));
}
public StartCompareUnitCalActor(ActorRef beforeCompareUnitActor) {
this.beforeCompareUnitActor = beforeCompareUnitActor;
}
@Override
public Receive createReceive() {
return receiveBuilder()
......@@ -81,6 +92,9 @@ public class StartCompareUnitCalActor extends AbstractActor{
compareUnitCalActor.tell(compareUnitCalMsg, getSelf());
}
}else {
//发送确认消息给父actor
CurrentCompUnitExeMsg currentCompUnitExeMsg = new CurrentCompUnitExeMsg(1,"");
beforeCompareUnitActor.tell(currentCompUnitExeMsg, ActorRef.noSender());
logger.info("对标单元计算完成");
}
}
......@@ -107,6 +121,9 @@ public class StartCompareUnitCalActor extends AbstractActor{
unitDef.getDate(), unitDef.getObjScoreRuleId());
}
}
//发送确认消息给父actor
CurrentCompUnitExeMsg currentCompUnitExeMsg = new CurrentCompUnitExeMsg(1,"");
beforeCompareUnitActor.tell(currentCompUnitExeMsg, ActorRef.noSender());
logger.info("对标单元计算完成");
}
}
......@@ -122,6 +139,9 @@ public class StartCompareUnitCalActor extends AbstractActor{
unitDef.getDate(), unitDef.getObjScoreRuleId());
}
}
//发送确认消息给父actor
CurrentCompUnitExeMsg currentCompUnitExeMsg = new CurrentCompUnitExeMsg(1,"");
beforeCompareUnitActor.tell(currentCompUnitExeMsg, ActorRef.noSender());
logger.info("对标单元计算完成");
}
})
......
package com.keymobile.indicators.akka.message.indicators;
import java.io.Serializable;
public class CurrentCompUnitExeMsg implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
//是否完成标识:1.完成 0.未完成
private Integer isFinish;
//日志报告
private String confirmMessage;
public CurrentCompUnitExeMsg(Integer isFinish,String confirmMessage) {
this.setIsFinish(isFinish);
this.setConfirmMessage(confirmMessage);
}
public Integer getIsFinish() {
return isFinish;
}
public void setIsFinish(Integer isFinish) {
this.isFinish = isFinish;
}
public String getConfirmMessage() {
return confirmMessage;
}
public void setConfirmMessage(String confirmMessage) {
this.confirmMessage = confirmMessage;
}
}
......@@ -8,7 +8,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.keymobile.indicators.akka.actor.indicators.StartCompareUnitCalActor;
import com.keymobile.indicators.akka.actor.indicators.BeforeCompareUnitCalActor;
import com.keymobile.indicators.akka.message.indicators.StartCompareUnitCalMsg;
import com.keymobile.indicators.model.entity.indicators.CompareUnitDef;
import com.keymobile.indicators.model.entity.indicators.DriveIndCalResultDef;
......@@ -72,12 +72,19 @@ public class DriveIndCalResultService {
public void compareUnitListCal(List<CompareUnitDef> compareUnitList) {
if(!compareUnitList.isEmpty()) {
List<CompareUnitDef> sameCompareUnitList = new ArrayList<>();
//将对标单元的日期改成同期
for(CompareUnitDef unitDef : compareUnitList) {
Integer date = unitDef.getDate()-100;
unitDef.setDate(date);
sameCompareUnitList.add(unitDef);
}
//启动回流actor
final ActorSystem system = ActorSystem.create("CompareUnitCalAkka");//创建akka
StartCompareUnitCalMsg startCompareUnitCalMsg = new StartCompareUnitCalMsg(compareUnitList);
ActorRef startCompareUnitCalActor = system.actorOf(Props.create(
StartCompareUnitCalActor.class,()-> new StartCompareUnitCalActor()));
startCompareUnitCalActor.tell(startCompareUnitCalMsg, ActorRef.noSender());
StartCompareUnitCalMsg startCompareUnitCalMsg = new StartCompareUnitCalMsg(sameCompareUnitList);
ActorRef beforeCompareUnitCalActor = system.actorOf(Props.create(
BeforeCompareUnitCalActor.class,()-> new BeforeCompareUnitCalActor()));
beforeCompareUnitCalActor.tell(startCompareUnitCalMsg, ActorRef.noSender());
logger.info("开始对标单元综合计算...");
}
}
......
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