AlarmManagerImpl.java

package com.mycim.server.alarm.manager.impl;

import com.mycim.framework.oid.IDGenerators;
import com.mycim.framework.oid.type.IDNames;
import com.mycim.framework.oid.type.SequenceNames;
import com.mycim.framework.utils.lang.collections.CollectionUtils;
import com.mycim.server.alarm.dao.AlarmDao;
import com.mycim.server.alarm.manager.AlarmCategoryManager;
import com.mycim.server.alarm.manager.AlarmManager;
import com.mycim.server.base.manager.NamedObjectManager;
import com.mycim.server.base.manager.RelationManager;
import com.mycim.server.ctx.manager.ContextValueManager;
import com.mycim.server.security.manager.UserManager;
import com.mycim.valueobject.alm.*;
import com.mycim.valueobject.bas.NamedObject;
import com.mycim.valueobject.security.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @author yanbing.chen
 * @date 2019/10/10
 * @since 1.8
 **/
@Service
@Transactional
public class AlarmManagerImpl implements AlarmManager {

    @Autowired
    AlarmDao alarmDao;

    @Autowired
    NamedObjectManager namedObjectManager;

    @Autowired
    RelationManager relationManager;

    @Autowired
    ContextValueManager contextValueManager;

    @Autowired
    AlarmCategoryManager alarmCategoryManager;

    @Autowired
    UserManager userManager;

    @Override
    public EenMessage getEenMessage(EenMessage eenMessage) {
        NamedObject namedObject = namedObjectManager.getNamedObject(eenMessage);
        if (namedObject == null) {
            return null;
        }
        long instanceRrn = namedObject.getInstanceRrn();
        eenMessage.copyNamedObject(namedObject);
        return alarmDao.getEenMessage(eenMessage, instanceRrn);
    }

    @Override
    public boolean isAlarmID(String alarmType, String alarmid) {
        return alarmDao.isAlarmID(alarmType, alarmid);
    }

    @Override
    public Alarm getAlarm(Alarm alarm) {
        alarm = alarmDao.getAlarm(alarm);
        if ((alarm != null) && (alarm.getAlarmCategoryRrn() != null) && (alarm.getAlarmCategoryRrn() > 0)) {
            alarm.setAlarmCategoryId(namedObjectManager.getNamedObjectId(alarm.getAlarmCategoryRrn()));
            return alarm;
        } else {
            return null;
        }
    }

    @Override
    public void insertAlarm(Alarm alarm) {
        alarmDao.insertAlarm(alarm);
    }

    @Override
    public void updateAlarm(Alarm alarm) {
        alarmDao.updateAlarm(alarm);
    }

    @Override
    public void deleteAlarm(Alarm alarm) {
        alarmDao.deleteAlarm(alarm);
    }

    @Override
    public List<EmailMessage> getAlarmEmailMessages(String status, int pageSize) {
        return getAlarmEmailMessages(status, pageSize, null);
    }

    @Override
    public List<EmailMessage> getAlarmEmailMessages(String status, int pageSize, String type) {
        return alarmDao.getAlarmEmailMessages(status, pageSize, type);
    }

    @Override
    public List<String> getEmailAddressByDepartment(String toUserGroupRrns) {
        List<User> userEmailList = alarmDao.getUserInfo4AlarmByDepartment(toUserGroupRrns);
        if (CollectionUtils.isEmpty(userEmailList)) {
            return null;
        }
        return userEmailList.parallelStream().map(User::getEmailAddress).collect(Collectors.toList());
    }

    @Override
    public List<String> getUserInfo4AlarmByUserGroups(String toUserGroupRrns) {
        List<User> userEmailList = alarmDao.getEmailAddressByUserGroups(toUserGroupRrns);
        if (CollectionUtils.isEmpty(userEmailList)) {
            return null;
        }
        return userEmailList.parallelStream().map(User::getEmailAddress).collect(Collectors.toList());
    }

    @Override
    public List<String> getEmailAddressByUserRrn(Long UserRrn) {
        User user = userManager.getUser(UserRrn);
        List result = new ArrayList();
        result.add(user.getEmailAddress());
        return result;
    }


    @Override
    public void deleteEmailMessage(EmailMessage emailMessage) {
        alarmDao.deleteEmailMessage(emailMessage);
    }

    @Override
    public void markedSendMailError(EmailMessage emailMessage) {
        alarmDao.markedSendMailError(emailMessage);
    }

    @Override
    public void deleteOldEmailMessages() {
        alarmDao.deleteOldEmailMessages();
    }

    @Override
    public void insertAlarmEmailMessag(EmailMessage emailMessage) {
        alarmDao.insertAlarmEmailMessag(emailMessage);
    }

    @Override
    public long insertAlarmActionHistory(HashMap jobData) {
        long reportAlarmRrn = Long.parseLong(
                IDGenerators.get(IDNames.SEQUENCE).generateId(SequenceNames.MODULE_SEQ_TRANSACTION_RRN));
        Alarm alarm = (Alarm) jobData.get("alarm");
        AlarmCategory alarmCategory = (AlarmCategory) jobData.get("alarmCategory");
        String alarmText = (String) jobData.get("alarmText");
        Long userRrn = (Long) jobData.get("userRrn");
        Long equipmentRrn = (Long) jobData.get("equipmentRrn");
        Long chamberRrn = (Long) jobData.get("chamberRrn");
        Long jobRrn = (Long) jobData.get("jobRrn");
        Long runRrn = (Long) jobData.get("runRrn");
        Timestamp triggeredTime = (Timestamp) jobData.get("curTime");
        alarm = this.getAlarm(alarm);

        TriggeredAlarm triggeredAlarm = new TriggeredAlarm();
        triggeredAlarm.setAlarm(alarm);
        triggeredAlarm.setAlarmText(alarmText);
        triggeredAlarm.setTriggeredBy(userRrn);
        triggeredAlarm.setEqptRrn(equipmentRrn);
        triggeredAlarm.setChamberRrn(chamberRrn);
        triggeredAlarm.setPriority(alarmCategory.getPriority());
        triggeredAlarm.setSeverity(alarmCategory.getSeverity());
        triggeredAlarm.setReportAlarmRrn(reportAlarmRrn);
        triggeredAlarm.setTriggeredTime(triggeredTime);
        triggeredAlarm.setJobRrn(jobRrn);
        triggeredAlarm.setRunRrn(runRrn);

        if ((triggeredAlarm.getPriority() != null) &&
                triggeredAlarm.getPriority().equalsIgnoreCase(AlarmCategory.SEVERITY_TYPE_INFORMATION)) {
            triggeredAlarm.setClearedFlag(TriggeredAlarm.FLAG_TRUE_KEY);
            triggeredAlarm.setAcknowledgedFlag(TriggeredAlarm.FLAG_TRUE_KEY);
            triggeredAlarm.setClearedTime(triggeredTime);
            triggeredAlarm.setAcknowledgedTime(triggeredTime);
        }
        alarmDao.insertAlarmActionHistory(triggeredAlarm);
        return reportAlarmRrn;
    }

    @Override
    public Map<String, Object> getTriggerAlarmWithWorkFlowInfo(Long entityRrn, String alarmId) {
        Map<String, Object> map = alarmDao.getTriggerAlarmWithWorkFlowInfo(entityRrn, alarmId);
        Alarm alarm = (Alarm) map.get("alarm");
        AlarmCategory alarmCategory = new AlarmCategory();
        alarmCategory.setInstanceRrn(alarm.getAlarmCategoryRrn());
        alarmCategory = alarmCategoryManager.getAlarmCategory(alarmCategory);
        map.put("alarmCategory", alarmCategory);
        return map;
    }

}