package com.mvc.dao.impl;
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.AlarmStatisticDao;
import com.mvc.entity.AlarmStatistic;
/**
* 报警统计持久层实现
*
* @author wangrui
* @date 2016-10-20
*/
@Repository("alarmStatisticDaoImpl")
public class AlarmStatisticDaoImpl implements AlarmStatisticDao {
@Autowired
@Qualifier("entityManagerFactory")
EntityManagerFactory emf;
// 报警统计
@Override
public AlarmStatistic findAlst(Integer user_id) {
EntityManager em = emf.createEntityManager();
StringBuilder sql = new StringBuilder();
sql.append(
"select * from (select coalesce(sum(case when task_state=0 then 1 else 0 end),0) total_receive_task_num,");// 当前用户接收的所有任务
sql.append("coalesce(sum(case when task_state=0 and task_type=1 then 1 else 0 end),0) assistant_task_num,");// 文书任务
sql.append(
"coalesce(sum(case when task_state=0 and task_type=2 then 1 else 0 end),0) manager_control_task_num,");// 执行管控任务
sql.append("coalesce(sum(case when task_state=0 and task_type=0 then 1 else 0 end),0) other_task_num ");// 普通任务
sql.append(
"from (select task_id,task_state,task_type from task where task_isdelete=0 and receiver_id=:user_id) as a) as aa,");
sql.append("(select coalesce(sum(case when invo_state=0 then 1 else 0 end),0) wait_audit_bill_task_num,");// 待审核发票任务
sql.append("coalesce(sum(case when invo_state=1 then 1 else 0 end),0) bill_task_num ");// 发票任务
sql.append(
"from (select invo_id,invo_state from invoice where invo_isdelete=0 and audit_id=:user_id) as b) as bb,");
sql.append("(select coalesce(sum(case when alar_code in(2,3) then 1 else 0 end),0) debt_alarm_num,");// 收款超时
sql.append("coalesce(sum(case when alar_code in(4,5) then 1 else 0 end),0) overdue_alarm_num,");// 工程逾期
sql.append("coalesce(sum(case when alar_code=1 then 1 else 0 end),0) task_alarm_num ");// 任务超时
sql.append(
"from (select count(alar_id) as tmp_id,alar_code from alarm a where receiver_id=:user_id and alar_isremove=0 ");
sql.append("group by task_id,reno_id,prst_id) as c) as cc,");
sql.append("(select count(remo_id) remo_task_num ");// 待核对到款任务
sql.append(
"from (select remo_id,remo_state from receive_money where operater_id=:user_id and remo_state=0) as d) as dd,");
sql.append("(select alst_id from alarm_statistic) as ee");
Query query = em.createNativeQuery(sql.toString(), AlarmStatistic.class);
query.setParameter("user_id", user_id);
AlarmStatistic alarmStatistic = (AlarmStatistic) query.getSingleResult();
em.close();
return alarmStatistic;
}
}