package com.dingzhuo.compute.engine.actor.alarm; import static org.apache.commons.lang3.StringUtils.equalsAnyIgnoreCase; import akka.actor.ActorSelection; import akka.actor.UntypedAbstractActor; import com.dingzhuo.compute.engine.message.alarm.AlarmJudgeMessage; import com.dingzhuo.compute.engine.message.alarm.AlarmRegisterMessage; import com.dingzhuo.compute.engine.message.alarm.AlarmType; import com.dingzhuo.compute.engine.message.alarm.LoadAlarmMessage; import com.dingzhuo.compute.engine.message.alarm.UnloadAlarmMessage; import com.dingzhuo.compute.engine.message.timer.RegisterType; import com.dingzhuo.compute.engine.utils.ActorUtil; import com.dingzhuo.compute.engine.utils.CacheService; import com.dingzhuo.energy.common.core.lang.UUID; import com.dingzhuo.energy.common.utils.time.TimeType; import com.dingzhuo.energy.data.monitoring.alarm.domain.AlarmItem; import com.dingzhuo.energy.data.monitoring.alarm.domain.HistoryAlarm; import com.dingzhuo.energy.data.monitoring.alarm.domain.RealTimeAlarm; import com.dingzhuo.energy.data.monitoring.alarm.service.IHistoryAlarmService; import com.dingzhuo.energy.data.monitoring.alarm.service.IRealtimeAlarmService; import com.dingzhuo.energy.dataservice.domain.Quality; import org.jetbrains.annotations.NotNull; import org.joda.time.DateTime; import org.joda.time.Seconds; import org.springframework.beans.factory.annotation.Autowired; /** * @author fanxinfu */ public abstract class BaseAlarmActor extends UntypedAbstractActor { @Autowired protected CacheService cacheService; @Autowired protected IRealtimeAlarmService realtimeAlarmService; @Autowired private IHistoryAlarmService historyAlarmService; private ActorSelection timerActor; @Override public void preStart() throws Exception { super.preStart(); timerActor = getContext().actorSelection(ActorUtil.getActorAddress(AlarmTimerActor.ACTOR_NAME)); } @Override public void onReceive(Object message) { if (message instanceof LoadAlarmMessage) { loadAlarm((LoadAlarmMessage) message); } else if (message instanceof UnloadAlarmMessage) { unloadAlarm((UnloadAlarmMessage) message); } else if (message instanceof AlarmJudgeMessage) { judge((AlarmJudgeMessage) message); } } private void unloadAlarm(UnloadAlarmMessage message) { cacheService.removeAlarmCache(message.getActorId()); AlarmItem alarmItem = message.getAlarmItem(); AlarmType alarmType = getAlarmType(alarmItem); timerActor .tell(new AlarmRegisterMessage(message.getActorId(), alarmType, RegisterType.UNREGISTER, alarmItem), self()); } private void loadAlarm(LoadAlarmMessage message) { AlarmItem alarmItem = message.getAlarmItem(); AlarmType alarmType = getAlarmType(alarmItem); cacheService.cacheAlarmItem(alarmItem); timerActor.tell(new AlarmRegisterMessage(message.getActorId(), alarmType, RegisterType.REGISTER, alarmItem), self()); } @NotNull private AlarmType getAlarmType(AlarmItem alarmItem) { AlarmType alarmType; if (equalsAnyIgnoreCase(alarmItem.getTimeSlot(), TimeType.LIVE.name())) { alarmType = AlarmType.LIVE; } else { alarmType = AlarmType.PERIOD; } return alarmType; } protected void insertPeriodHistoryAlarm(AlarmItem item, DateTime now, String timeCode, RealTimeAlarm realTimeAlarm) { HistoryAlarm historyAlarm = new HistoryAlarm(); if (realTimeAlarm == null) { realTimeAlarm = realtimeAlarmService.getAlarmByItemIdAndTimeCode(item.getId(), timeCode); } historyAlarm.setId(UUID.fastUUID().toString()); historyAlarm.setBeginTime(realTimeAlarm.getBeginTime()); historyAlarm.setIndexId(realTimeAlarm.getIndexId()); historyAlarm.setLimitingValue(realTimeAlarm.getLimitingValue()); historyAlarm.setItemId(item.getId()); historyAlarm.setAlarmValue(realTimeAlarm.getAlarmValue()); historyAlarm.setAlarmValueQuality(realTimeAlarm.getAlarmValueQuality()); historyAlarm.setEndTime(now.toDate()); historyAlarm.setTimeCode(realTimeAlarm.getTimeCode()); int durationSecond = Seconds.secondsBetween(new DateTime(historyAlarm.getBeginTime()), new DateTime(historyAlarm.getEndTime())).getSeconds(); historyAlarm.setDuration(durationSecond); historyAlarmService.updateHistoryAlarm(historyAlarm.getItemId(), historyAlarm); } protected void insertHistoryAlarm(AlarmItem item, DateTime now) { HistoryAlarm historyAlarm = new HistoryAlarm(); RealTimeAlarm realTimeAlarm = realtimeAlarmService.getRealTimeAlarmByAlarmCode( item.getAlarmCode()); if (realTimeAlarm == null) { return; } historyAlarm.setId(UUID.fastUUID().toString()); historyAlarm.setBeginTime(realTimeAlarm.getBeginTime()); historyAlarm.setIndexId(realTimeAlarm.getIndexId()); historyAlarm.setLimitingValue(realTimeAlarm.getLimitingValue()); historyAlarm.setItemId(item.getId()); historyAlarm.setAlarmCode(item.getAlarmCode()); historyAlarm.setAlarmValue(realTimeAlarm.getAlarmValue()); historyAlarm.setAlarmValueQuality(realTimeAlarm.getAlarmValueQuality()); historyAlarm.setEndTime(now.toDate()); historyAlarm.setTimeCode(realTimeAlarm.getTimeCode()); int durationSecond = Seconds.secondsBetween(new DateTime(historyAlarm.getBeginTime()), new DateTime(historyAlarm.getEndTime())).getSeconds(); historyAlarm.setDuration(durationSecond); historyAlarmService.updateHistoryAlarm(historyAlarm.getAlarmCode(), historyAlarm); } protected void insertRealtimeAlarm(AlarmItem item, DateTime now, Double value, Quality quality, String timeCode) { RealTimeAlarm realTimeAlarm = realtimeAlarmService.getRealTimeAlarmByAlarmCode( item.getAlarmCode()); if (realTimeAlarm != null) { return; } realTimeAlarm = new RealTimeAlarm(); realTimeAlarm.setId(UUID.fastUUID().toString()); realTimeAlarm.setBeginTime(now.toDate()); realTimeAlarm.setIndexId(item.getDwid()); realTimeAlarm.setLimitingValue(Double.parseDouble(item.getLimitVal())); realTimeAlarm.setItemId(item.getId()); realTimeAlarm.setAlarmCode(item.getAlarmCode()); realTimeAlarm.setAlarmValue(value); realTimeAlarm.setAlarmValueQuality(quality); realTimeAlarm.setTimeCode(timeCode); realtimeAlarmService.insert(realTimeAlarm); } abstract void judge(AlarmJudgeMessage message); }