AlarmDaoImpl.java
package com.mycim.server.alarm.dao.impl;
import com.mycim.framework.jdbc.JdbcTemplate;
import com.mycim.framework.jdbc.mapper.RowMapper;
import com.mycim.framework.utils.MiscUtils;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.time.DateUtils;
import com.mycim.server.alarm.dao.AlarmDao;
import com.mycim.server.alarm.dao.mapper.EmailMessageMapper;
import com.mycim.valueobject.alm.Alarm;
import com.mycim.valueobject.alm.EenMessage;
import com.mycim.valueobject.alm.EmailMessage;
import com.mycim.valueobject.alm.TriggeredAlarm;
import com.mycim.valueobject.consts.DataBaseNames;
import com.mycim.valueobject.consts.LinkTypeList;
import com.mycim.valueobject.security.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.support.rowset.SqlRowSet;
import org.springframework.stereotype.Repository;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Repository
public class AlarmDaoImpl implements AlarmDao {
@Autowired
JdbcTemplate jdbcTemplate;
@Override
public EenMessage getEenMessage(EenMessage eenMessage, long instanceRrn) {
String sql =
"SELECT MESSAGE_RRN,MESSAGE_SUBJECT,MESSAGE_TEXT" + " FROM EEN_MESSAGE " + " WHERE MESSAGE_RRN " + "=" +
instanceRrn;
return jdbcTemplate.queryForObject(sql, new RowMapper<EenMessage>() {
@Override
public EenMessage mapRow(ResultSet rs, int rowNum) throws SQLException {
// construct the value object
eenMessage.setInstanceRrn(instanceRrn);
eenMessage.setMessageSubject(rs.getString("MESSAGE_SUBJECT"));
eenMessage.setMessageText(rs.getString("MESSAGE_TEXT"));
return eenMessage;
}
});
}
@Override
public boolean isAlarmID(String alarmType, String alarmID) {
String sql = "SELECT COUNT(*) FROM " + DataBaseNames.ALARM + " WHERE ALARM_TYPE = '" + alarmType + "' and " +
"ALARM_ID = '" + alarmID + "'";
long number = jdbcTemplate.queryForObject(sql, int.class);
if (number > 0) {
return true;
} else if (number == 0) {
return false;
} else {
return false;
}
}
@Override
public Alarm getAlarm(Alarm alarm) {
String sql = "SELECT ALARM_DESC,ALARM_CATEGORY_RRN,ENABLE_FLAG FROM " + DataBaseNames.ALARM + " WHERE " +
"ALARM_TYPE = ? and EQUIPMENT_MODEL_RRN = ?" + " and ALARM_ID = ?";
return jdbcTemplate.queryForObjectWithNull(sql, new Object[]{alarm.getAlarmType(), alarm.getEqptModelRrn(),
alarm.getAlarmId()}, new RowMapper<Alarm>() {
@Override
public Alarm mapRow(ResultSet rs, int rowNum) throws SQLException {
alarm.setAlarmDesc(rs.getString("ALARM_DESC"));
alarm.setAlarmCategoryRrn(rs.getLong("ALARM_CATEGORY_RRN"));
alarm.setEnableFlag(rs.getString("ENABLE_FLAG"));
return alarm;
}
});
}
@Override
public void insertAlarm(Alarm alarm) {
Object[] obj = {alarm.getAlarmType(), alarm.getAlarmId(), alarm.getAlarmDesc(), alarm.getAlarmCategoryRrn(),
alarm.getEnableFlag()};
String sql = "INSERT INTO " + DataBaseNames.ALARM + " (EQUIPMENT_MODEL_RRN,ALARM_TYPE,ALARM_ID,ALARM_DESC," +
"ALARM_CATEGORY_RRN,ENABLE_FLAG)" + " VALUES (" + MiscUtils.parseSQL(alarm.getEqptModelRrn()) + ", " +
MiscUtils.parseSQL(obj) + ")";
jdbcTemplate.update(sql);
}
@Override
public void updateAlarm(Alarm alarm) {
String sql = "UPDATE " + DataBaseNames.ALARM + " SET ALARM_DESC = " + MiscUtils.parseSQL(alarm.getAlarmDesc()) +
"," + " ALARM_CATEGORY_RRN = " + MiscUtils.parseSQL(alarm.getAlarmCategoryRrn()) + "," +
" ENABLE_FLAG = " + StringUtils.wrapWithApostropheIfMissing(alarm.getEnableFlag()) +
" WHERE ALARM_TYPE = " + StringUtils.wrapWithApostropheIfMissing(alarm.getAlarmType()) +
" and EQUIPMENT_MODEL_RRN = " + MiscUtils.parseSQL(alarm.getEqptModelRrn()) + " and ALARM_ID = " +
StringUtils.wrapWithApostropheIfMissing(alarm.getAlarmId());
jdbcTemplate.update(sql);
}
@Override
public void deleteAlarm(Alarm alarm) {
String sql = "DELETE FROM " + DataBaseNames.ALARM + " WHERE ALARM_TYPE = " +
MiscUtils.parseSQL(alarm.getAlarmType()) + " and EQUIPMENT_MODEL_RRN = " +
MiscUtils.parseSQL(alarm.getEqptModelRrn()) + " and ALARM_ID = " +
StringUtils.wrapWithApostropheIfMissing(alarm.getAlarmId());
jdbcTemplate.update(sql);
}
@Override
public List<EmailMessage> getAlarmEmailMessages(String status, int pageSize, String type) {
List<Object> params = new ArrayList<>();
StringBuilder sql = new StringBuilder();
sql.append("SELECT t0.* FROM (SELECT t.* FROM alarm_email_message t where t.status = ?");
params.add(status);
if (StringUtils.isNotBlank(type)) {
sql.append(" and t.EMAIL_TYPE = ? ");
params.add(type);
}
sql.append("order by t.created_date) t0 where rownum <= ?");
params.add(pageSize);
return jdbcTemplate.query(sql.toString(), params.toArray(), new EmailMessageMapper());
}
@Override
public List<User> getUserInfo4AlarmByDepartment(String department) {
String sql = "select user_rrn,user_name,email_address from user_profile where shift_id in" + " (";
String[] departments = StringUtils.split(department, EmailMessage.USERGROUP_SEPARATOR);
for (int i = 0; i < departments.length; i++) {
if (i == 0) {
sql += "?";
} else {
sql += ",?";
}
}
sql += ")and email_address is not null ";
return jdbcTemplate.query(sql, departments, (RowMapper<User>) (rs, rowNum) -> {
User user = new User();
user.setUserName(rs.getString("user_name"));
user.setEmailAddress(rs.getString("email_address"));
return user;
});
}
@Override
public List<User> getEmailAddressByUserGroups(String toUserGroupRrns) {
String sql = "SELECT distinct t.user_rrn,t.user_name,t.email_address FROM user_profile t,relation r " +
"where r.from_rrn=t.user_rrn and r.link_type='" + LinkTypeList.USER_USERGROUP_KEY + "' and t" +
".email_address is not null and r.to_rrn in (" + toUserGroupRrns + ") order by t.user_name ";
return jdbcTemplate.query(sql, (RowMapper<User>) (rs, rowNum) -> {
User user = new User();
user.setUserName(rs.getString("user_name"));
user.setEmailAddress(rs.getString("email_address"));
return user;
});
}
@Override
public void deleteEmailMessage(EmailMessage emailMessage) {
String sql = "UPDATE alarm_email_message t SET t.status='SENT',t.last_updated_date=sysdate WHERE t" +
".message_rrn=?";
jdbcTemplate.update(sql, emailMessage.getMessageRrn());
}
@Override
public void markedSendMailError(EmailMessage emailMessage) {
String sql = "UPDATE alarm_email_message SET status='SENT_ERROR',last_updated_date=sysdate " + "WHERE " +
"message_rrn=?";
jdbcTemplate.update(sql, emailMessage.getMessageRrn());
}
@Override
public void deleteOldEmailMessages() {
String sql = "DELETE FROM alarm_email_message WHERE (status='SENT' or status='SENT_ERROR') and " + " " +
"last_updated_date < sysdate - 7";
jdbcTemplate.update(sql);
}
@Override
public void insertAlarmEmailMessag(EmailMessage emailMessage) {
String sql = " INSERT INTO " + DataBaseNames.ALARM_EMAIL_MESSAGE + " (MESSAGE_RRN,EMAIL_TYPE, FROM_USER, " +
"TO_USERS,CC_USERS, SUBJECT, CONTENT, " + "CREATED_DATE, CREATED_USER, LAST_UPDATED_DATE, " +
"LAST_UPDATED_USER, " + " STATUS,ATTRIBUTE_DATA1, ATTRIBUTE_DATA2, ATTRIBUTE_DATA3, ATTRIBUTE_DATA4, " +
"ATTRIBUTE_DATA5)\n" + " VALUES (MSG_SEQ.nextval, ?, ?, ?, ? ,?, ?, sysdate, ?, sysdate, ?, ?, ?, " +
"?, ?, ?, " + "?)";
jdbcTemplate.update(sql, emailMessage.getEmailType(), emailMessage.getFromUser(), emailMessage.getToUsers(),
emailMessage.getCcUsers(), emailMessage.getSubject(), emailMessage.getContent(),
emailMessage.getCreatedUser().getInstanceRrn(),
emailMessage.getLastUpdatedUser().getInstanceRrn(), "WAITING",
emailMessage.getAttributeData1(), emailMessage.getAttributeData2(),
emailMessage.getAttributeData3(), emailMessage.getAttributeData4(),
emailMessage.getAttributeData5());
}
@Override
public void insertAlarmActionHistory(TriggeredAlarm alarmInfo) {
Object[] obj = {alarmInfo.getReportAlarmRrn(), alarmInfo.getAlarmStatus(), alarmInfo.getAlarm().getAlarmId(),
alarmInfo.getAlarmText(), alarmInfo.getAlarm().getAlarmType(), alarmInfo.getSeverity(),
alarmInfo.getPriority(), alarmInfo.getLotRrn(), alarmInfo.getChamberRrn(),
alarmInfo.getEqptRrn(), alarmInfo.getJobRrn(), alarmInfo.getRunRrn(),
alarmInfo.getTriggeredBy(), alarmInfo.getTriggerExecutionRrn(), alarmInfo.getAcknowledgedFlag(),
alarmInfo.getAcknowledgedBy(), alarmInfo.getAcknowledgedExecutionRrn(),
alarmInfo.getAcknowledgedComments(), alarmInfo.getClearedFlag(), alarmInfo.getClearedBy(),
alarmInfo.getClearExecutionRrn(), alarmInfo.getClearedComments(),
alarmInfo.getRemindExecutionRrn(), alarmInfo.getManualTriggerFlag()};
// insert into ALARM_ACTTION_H table
String sqlh = "INSERT INTO " + DataBaseNames.ALARM_ACTION_HISTORY + " (REPORT_ALARM_RRN,ALARM_STATUS," +
"ALARM_ID,ALARM_TEXT,ALARM_TYPE,SEVERITY,PRIORITY, " + " LOT_RRN,CHAMBER_RRN,EQPT_RRN,JOB_RRN," +
"RUN_RRN,TRIGGERED_BY," + "TRIGGERED_EXECUTION_RRN,ACKNOWLEDGED_FLAG," + " ACKNOWLEDGED_BY," +
"ACKNOLEDGED_EXECUTION_RRN,ACKNOWLEDGED_COMMENTS," + " CLEARED_FLAG,CLEARED_BY,CLEARED_EXECUTION_RRN," +
"CLEARED_COMMENTS," + " REMIND_EXECUTION_RRN,MANUALLY_TRIGGER_FLAG,TRIGGERED_TIME,ACKNOWLEDGED_TIME," +
"CLEARED_TIME)" + " VALUES (" + MiscUtils.parseSQL(obj) + "," + " to_date('" +
processTime(alarmInfo.getTriggeredTime()) + "', '" + DateUtils.DATE_FORMAT24 + "')," + " to_date('" +
processTime(alarmInfo.getAcknowledgedTime()) + "', '" + DateUtils.DATE_FORMAT24 + "')," + " to_date('" +
processTime(alarmInfo.getClearedTime()) + "', '" + DateUtils.DATE_FORMAT24 + "') ) ";
jdbcTemplate.update(sqlh);
}
@Override
public Map<String, Object> getTriggerAlarmWithWorkFlowInfo(Long entityRrn, String alarmId) {
String sql_1 = "SELECT MAINTENANCE_ENGINEER_RRN from ENTITY " + " WHERE ENTITY_RRN=" + entityRrn;
String sql_2 = "SELECT T.ALARM_DESC ,T.ALARM_ID ,C.TRIGGER_WFL_RRN ,C.ALARM_CATEGORY_RRN FROM ALARM T ," +
"ALARM_CATEGORY C" + " WHERE T.ALARM_CATEGORY_RRN=C.ALARM_CATEGORY_RRN" + " AND T.ALARM_ID='" +
alarmId + "'" + " AND T.ALARM_TYPE='SYSTEM'";
Map<String, Object> map = new HashMap<>();
SqlRowSet rs = jdbcTemplate.queryForRowSet(sql_1);
if (rs.next()) {
map.put("toUserRrn", rs.getLong("MAINTENANCE_ENGINEER_RRN"));
} else {
map.put("toUserRrn", 0L);
}
rs = jdbcTemplate.queryForRowSet(sql_2);
long alarmCategoryRrn = 0;
if (rs.next()) {
map.put("alarmId", alarmId);
map.put("alarmText", rs.getString("ALARM_DESC"));
map.put("workflowRrn", rs.getLong("TRIGGER_WFL_RRN"));
alarmCategoryRrn = rs.getLong("ALARM_CATEGORY_RRN");
}
Alarm alarm = new Alarm();
alarm.setAlarmId(alarmId);
alarm.setAlarmType("SYSTEM");
alarm = getAlarm(alarm);
map.put("alarm", alarm);
return map;
}
private String processTime(Timestamp timestamp) {
String time = DateUtils.formatDate(timestamp);
time = StringUtils.isEmpty(time) ? "" : time;
return time;
}
}