/**
*
*/
package com.mvc.dao.impl;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;
import com.mvc.dao.AlarmDao;
import com.mvc.entity.Alarm;
/**
* 报警
*
* @author zjn
* @date 2016年10月25日
*/
@Repository("alarmDaoImpl")
public class AlarmDaoImpl implements AlarmDao {
@Autowired
@Qualifier("entityManagerFactory")
EntityManagerFactory emf;
// 根据参数统计报警列表条数,alarmType是数组类型:[2,3]
@SuppressWarnings("unchecked")
@Override
public Integer countByParam(Integer user_id, String alarmType, String searchKey) {
EntityManager em = emf.createEntityManager();
String[] chars = alarmType.split(",");
ArrayList<Integer> types = new ArrayList<Integer>();
for (int i = 0; i < chars.length; i++) {
types.add(Integer.valueOf(chars[i]));
}
String countSql = " select count(*) from (select count(alar_id) from alarm a where receiver_id=:receiver_id and alar_isremove=0 and alar_code in(:alar_code) ";
// 判断查找关键字是否为空
if (null != searchKey && searchKey != " ") {
countSql += " and ( alar_content like '%" + searchKey + "%' )";
}
countSql += " group by task_id,reno_id,prst_id) as tmp ";
Query query = em.createNativeQuery(countSql);
query.setParameter("receiver_id", user_id);
query.setParameter("alar_code", types);
List<Object> totalRow = query.getResultList();
em.close();
return Integer.parseInt(totalRow.get(0).toString());
}
// 查找报警信息列表
@SuppressWarnings("unchecked")
@Override
public List<Alarm> findAlarmList(Integer user_id, String searchKey, String alarmType, Integer offset, Integer end) {
EntityManager em = emf.createEntityManager();
String[] chars = alarmType.split(",");
ArrayList<Integer> types = new ArrayList<Integer>();
for (int i = 0; i < chars.length; i++) {
types.add(Integer.valueOf(chars[i]));
}
String selectSql = "select count(1)num , alar_id,alar_time,alar_content,alar_code,alar_isremove,receiver_id,cont_id,task_id,reno_id,prst_id from Alarm where receiver_id=:receiver_id and alar_isremove=0 and alar_code in(:alar_code) ";
// 判断查找关键字是否为空
if (null != searchKey) {
selectSql += " and ( alar_content like '%" + searchKey + "%' )";
}
selectSql += " group by task_id,reno_id,prst_id ";
selectSql += " order by alar_id desc limit :offset,:end ";
Query query = em.createNativeQuery(selectSql, Alarm.class);
query.setParameter("receiver_id", user_id);
query.setParameter("alar_code", types);
query.setParameter("offset", offset);
query.setParameter("end", end);
List<Alarm> list = query.getResultList();
em.close();
return list;
}
// 王睿:根据ID及其类型解除报警
@Override
public boolean updateByIdType(Integer Id, Integer IdType) {
EntityManager em = emf.createEntityManager();
try {
em.getTransaction().begin();
String selectSql = "";
Query query = null;
if (IdType == 0) {
selectSql = "update alarm set `alar_isremove` = 1 where alar_id in (select alar_id from (select * from alarm where prst_id =:prst_id) a)";
query = em.createNativeQuery(selectSql);
query.setParameter("prst_id", Id);
} else if (IdType == 1) {
selectSql = "update alarm set `alar_isremove` = 1 where alar_id in (select alar_id from (select * from alarm where task_id =:task_id) a)";
query = em.createNativeQuery(selectSql);
query.setParameter("task_id", Id);
} else if (IdType == 2) {
selectSql = "update alarm set `alar_isremove` = 1 where alar_id in (select alar_id from (select * from alarm where reno_id =:reno_id) a)";
query = em.createNativeQuery(selectSql);
query.setParameter("reno_id", Id);
}
query.executeUpdate();
em.flush();
em.getTransaction().commit();
} finally {
em.close();
}
return true;
}
}