package com.mvc.dao.impl; import java.math.BigInteger; 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.ContractDao; import com.mvc.entity.Contract; /** * 合同 * * @author wangrui * @date 2016年9月13日 */ @Repository("contractDaoImpl") public class ContractDaoImpl implements ContractDao { @Autowired @Qualifier("entityManagerFactory") EntityManagerFactory emf; // 返回欠款合同信息 @SuppressWarnings("unchecked") @Override public List<Contract> findAllDebtCont(String contName, Integer offset, Integer end) { EntityManager em = emf.createEntityManager(); StringBuilder sql = new StringBuilder(); sql.append( "select * from contract c where c.cont_state=0 and c.cont_id in (select distinct(rn.cont_id) from receive_node rn "); sql.append("where rn.reno_time<=now() and rn.reno_state in (0,2)) and c.cont_ishistory=0"); if (null != contName) { sql.append(" and c.cont_name like '%" + contName + "%'"); } sql.append(" order by cont_id desc limit :offset,:end"); Query query = em.createNativeQuery(sql.toString(), Contract.class); query.setParameter("offset", offset).setParameter("end", end); List<Contract> list = query.getResultList(); em.close(); return list; } // 返回逾期合同信息 @SuppressWarnings("unchecked") @Override public List<Contract> findAllOverdueCont(String contName, Integer offset, Integer end) { EntityManager em = emf.createEntityManager(); StringBuilder sql = new StringBuilder(); sql.append( "select * from contract c where c.cont_state=0 and c.cont_id in (select distinct(ps.cont_id) from project_stage ps where ps.prst_etime<=now()"); sql.append(" and ps.prst_state=0) and c.cont_ishistory=0"); if (contName != null) { sql.append(" and c.cont_name like '%" + contName + "%'"); } sql.append(" order by cont_id desc limit :offset,:end"); Query query = em.createNativeQuery(sql.toString(), Contract.class); query.setParameter("offset", offset).setParameter("end", end); List<Contract> list = query.getResultList(); em.close(); return list; } // 根据合同名获取合同信息 @SuppressWarnings("unchecked") @Override public List<Contract> findConByName(String contName, Integer offset, Integer end) { EntityManager em = emf.createEntityManager(); StringBuilder sql = new StringBuilder(); sql.append("select * from contract c where c.cont_state=0 and c.cont_ishistory=0");// 在建 if (null != contName) { sql.append(" and c.cont_name like '%" + contName + "%'"); } sql.append(" order by cont_id desc limit :offset,:end"); Query query = em.createNativeQuery(sql.toString(), Contract.class); query.setParameter("offset", offset).setParameter("end", end); List<Contract> list = query.getResultList(); em.close(); return list; } // 根据创建者ID和合同名查询合同总条数 @Override public Long countTotal(String contName, Integer methodType) { EntityManager em = emf.createEntityManager(); StringBuilder sql = new StringBuilder(); sql.append("select count(cont_id) from contract c where c.cont_ishistory=0 "); if (methodType == 1) {// 根据name查询 sql.append(" and c.cont_state=0"); } else if (methodType == 2) {// 查询欠款 sql.append( " and c.cont_state=0 and c.cont_id in (select distinct(rn.cont_id) from receive_node rn where rn.reno_time<=now() and rn.reno_state in (0,2))"); } else if (methodType == 3) {// 查询逾期 sql.append( " and c.cont_state=0 and c.cont_id in (select distinct(t.cont_id) from task t where t.task_etime<=now() and t.task_state in (0,1) and t.task_isdelete=0)"); } else if (methodType == 4) {// 终结合同 sql.append(" and c.cont_state=1");// 竣工 } else if (methodType == 5) {// 停建合同 sql.append(" and c.cont_state=2");// 停建 } if (contName != null) { sql.append(" and c.cont_name like '%" + contName + "%'"); } Query query = em.createNativeQuery(sql.toString()); BigInteger totalRow = (BigInteger) query.getSingleResult();// count返回值为BigInteger类型 em.close(); return totalRow.longValue(); } // 删除合同 @Override public Boolean delete(Integer cont_id) { EntityManager em = emf.createEntityManager(); StringBuilder sql = new StringBuilder(); try { em.getTransaction().begin(); sql.append("update contract c set c.cont_ishistory=1 where c.cont_id=:cont_id"); Query query = em.createNativeQuery(sql.toString()); query.setParameter("cont_id", cont_id); query.executeUpdate(); em.flush(); em.getTransaction().commit(); } finally { em.close(); } return true; } // 查询所有终结合同列表 @SuppressWarnings("unchecked") @Override public List<Contract> findAllEndCont(String contName, Integer offset, Integer end) { EntityManager em = emf.createEntityManager(); StringBuilder sql = new StringBuilder(); sql.append("select * from contract c where c.cont_state=1 and c.cont_ishistory=0"); if (contName != null) { sql.append(" and c.cont_name like '%" + contName + "%'"); } sql.append(" order by cont_id desc limit :offset,:end"); Query query = em.createNativeQuery(sql.toString(), Contract.class); query.setParameter("offset", offset).setParameter("end", end); List<Contract> list = query.getResultList(); em.close(); return list; } // 修改合同基本信息 @Override public Boolean updateConById(Integer cont_id, Contract contract) { EntityManager em = emf.createEntityManager(); try { em.getTransaction().begin(); em.merge(contract); em.getTransaction().commit(); } finally { em.close(); } return true; } // 张姣娜:根据合同id修改状态 public Boolean updateState(Integer contId, Integer contState) { EntityManager em = emf.createEntityManager(); StringBuilder sql = new StringBuilder(); try { em.getTransaction().begin(); sql.append("update contract c set c.cont_state=:cont_state where c.cont_id=:cont_id"); Query query = em.createNativeQuery(sql.toString()); query.setParameter("cont_state", contState); query.setParameter("cont_id", contId); query.executeUpdate(); em.flush(); em.getTransaction().commit(); } finally { em.close(); } return true; } // 张姣娜:查询所有停建合同列表 @SuppressWarnings("unchecked") @Override public List<Contract> findAllStopCont(String contName, Integer offset, Integer end) { EntityManager em = emf.createEntityManager(); StringBuilder sql = new StringBuilder(); sql.append("select * from contract c where c.cont_state=2 and c.cont_ishistory=0"); if (contName != null) { sql.append(" and c.cont_name like '%" + contName + "%'"); } sql.append(" order by cont_id desc limit :offset,:end"); Query query = em.createNativeQuery(sql.toString(), Contract.class); query.setParameter("offset", offset).setParameter("end", end); List<Contract> list = query.getResultList(); em.close(); return list; } }