package com.dingzhuo.compute.engine.actor.alarm; import com.dingzhuo.compute.engine.function.FunctionEngine; import com.dingzhuo.compute.engine.message.alarm.AlarmJudgeMessage; import com.dingzhuo.compute.engine.message.alarm.AlarmStatus; import com.dingzhuo.energy.data.monitoring.alarm.domain.AlarmItem; import com.dingzhuo.energy.dataservice.domain.TagValue; import org.joda.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; /** * @author fanxinfu */ @Component("realtimeAlarmActor") @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public class RealtimeAlarmActor extends BaseAlarmActor { public static final String ACTOR_NAME = "realtimeAlarmActor"; private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Override void judge(AlarmJudgeMessage message) { try { String actorId = message.getActorId(); AlarmItem item = cacheService.getAlarmItem(actorId); AlarmStatus lastStatus = cacheService .getAlarmStatus(item.getDwid(), item.getTimeSlot(), item.getLimitType()); DateTime now = DateTime.now(); if (lastStatus == null) { lastStatus = new AlarmStatus(); lastStatus.setAlarm(false); lastStatus.setBeginTime(now.toDate()); } Object value = FunctionEngine.getInstance().eval(item.getCalcText()); boolean isAlarm = (Boolean) value; if (isAlarm != lastStatus.isAlarm()) { try { if (isAlarm) { TagValue tagValue = cacheService.getTagValue(item.getIndexCode()); insertRealtimeAlarm(item, now, tagValue.getValue(), tagValue.getQuality(), "L"); } else { insertHistoryAlarm(item, now); } lastStatus.setAlarm(isAlarm); cacheService .cacheAlarmStatus(item.getDwid(), item.getTimeSlot(), item.getLimitType(), lastStatus); } catch (Exception ex) { logger.error(ex.getMessage(), ex); } } } catch (Exception ex) { logger.error(ex.getMessage(), ex); } } }