package com.mvc.dao.impl;
import java.math.BigInteger;
import java.util.Date;
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.base.enums.InvoiceStatus;
import com.base.enums.IsDelete;
import com.mvc.dao.InvoiceDao;
import com.mvc.entity.Invoice;
import com.utils.Pager;
/**
* 发票
*
* @author zjn
* @date 2016年9月16日
*/
@Repository("invoiceDaoImpl")
public class InvoiceDaoImpl implements InvoiceDao {
@Autowired
@Qualifier("entityManagerFactory")
EntityManagerFactory emf;
// 根据发票id修改状态
public boolean invoiceFinish(Integer id, Date invoTime) {
EntityManager em = emf.createEntityManager();
try {
em.getTransaction().begin();
String selectSql = " update invoice set invo_state = :invo_state ,invo_time=:invo_time where invo_id =:invo_id ";
Query query = em.createNativeQuery(selectSql);
query.setParameter("invo_state", InvoiceStatus.finish.value);
query.setParameter("invo_id", id);
query.setParameter("invo_time", invoTime);
query.executeUpdate();
em.flush();
em.getTransaction().commit();
} finally {
em.close();
}
return true;
}
// 根据发票id删除发票
public boolean delete(Integer invoiceId) {
EntityManager em = emf.createEntityManager();
try {
em.getTransaction().begin();
String selectSql = " update invoice set invo _isdelete =:invo _isdelete where invo_id =:invo_id ";
Query query = em.createNativeQuery(selectSql);
query.setParameter("invo_id", invoiceId);
query.setParameter("invo _isdelete", IsDelete.YES.value);
query.executeUpdate();
em.flush();
em.getTransaction().commit();
} finally {
em.close();
}
return true;
}
@SuppressWarnings("unchecked")
// 根据合同ID,页数,关键字返回发票列表
public List<Invoice> findByContId(Integer cont_id, Integer offset, Integer end) {
EntityManager em = emf.createEntityManager();
String selectSql = "select * from invoice where contract_id=:contract_id and invo_isdelete=0 ";
selectSql += " order by invo_id desc limit :offset, :end";
Query query = em.createNativeQuery(selectSql, Invoice.class);
query.setParameter("contract_id", cont_id);
query.setParameter("offset", offset);
query.setParameter("end", end);
List<Invoice> list = query.getResultList();
em.close();
return list;
}
// 根据合同ID,关键字查询发票总条数
public Integer countByContId(Integer cont_id) {
EntityManager em = emf.createEntityManager();
String countSql = " select count(invo_id) from invoice where invo_isdelete=0 and contract_id=:contract_id ";
Query query = em.createNativeQuery(countSql);
query.setParameter("contract_id", cont_id);
BigInteger totalRow = (BigInteger) query.getSingleResult();// count返回值为BigInteger类型
em.close();
return totalRow.intValue();
}
// 根据合同ID查询发票总金额
@SuppressWarnings("unchecked")
public Float totalMoneyOfInvoice(Integer contId) {
EntityManager em = emf.createEntityManager();
String countSql = " select coalesce(sum(invo_money),0) from invoice i where contract_id=:contract_id and invo_state=:invo_state";
Query query = em.createNativeQuery(countSql);
query.setParameter("contract_id", contId);
query.setParameter("invo_state", InvoiceStatus.finish.value);
List<Object> totalRow = query.getResultList();
em.close();
return Float.valueOf(totalRow.get(0).toString());
}
// 根据用户id,页数返回发票列表
@SuppressWarnings("unchecked")
public List<Invoice> findByPage(Integer user_id, Integer ifSend, Integer offset, Integer end) {
EntityManager em = emf.createEntityManager();
String selectSql = "select * from invoice where audit_id=:audit_id and invo_isdelete=0 and invo_state=:invo_state";
selectSql += " order by invo_id desc limit :offset, :end";
Query query = em.createNativeQuery(selectSql, Invoice.class);
query.setParameter("audit_id", user_id);
query.setParameter("invo_state", ifSend);
query.setParameter("offset", offset);
query.setParameter("end", end);
List<Invoice> list = query.getResultList();
em.close();
return list;
}
// 根据用户ID查询发票总条数
@SuppressWarnings("unchecked")
public Integer countByParam(Integer user_id, Integer ifSend) {
EntityManager em = emf.createEntityManager();
String countSql = " select count(invo_id) from invoice where invo_isdelete=0 and audit_id=:audit_id and invo_state=:invo_state ";
Query query = em.createNativeQuery(countSql);
query.setParameter("audit_id", user_id);
query.setParameter("invo_state", ifSend);
List<Object> result = query.getResultList();
em.close();
return Integer.parseInt(result.get(0).toString());
}
// 按发票状态获取列表
@SuppressWarnings("unchecked")
public Integer WaitingDealCountByParam(Integer user_id, Integer invoiceState) {
EntityManager em = emf.createEntityManager();
String countSql = " select count(invo_id) from invoice where invo_isdelete=0 and receiver_id=:receiver_id and invo_state=:invo_state ";
Query query = em.createNativeQuery(countSql);
query.setParameter("receiver_id", user_id);
query.setParameter("invo_state", invoiceState);
List<Object> totalRow = query.getResultList();
em.close();
return Integer.parseInt(totalRow.get(0).toString());
}
// 根据用户id,页数返回发票列表
@SuppressWarnings("unchecked")
public List<Invoice> WaitingDealFindByPage(Integer user_id, Integer invoiceState, Integer offset, Integer end) {
EntityManager em = emf.createEntityManager();
String selectSql = "select * from invoice where receiver_id=:receiver_id and invo_isdelete=0 and invo_state=:invo_state";
selectSql += " order by invo_id desc limit :offset, :end";
Query query = em.createNativeQuery(selectSql, Invoice.class);
query.setParameter("receiver_id", user_id);
query.setParameter("invo_state", invoiceState);
query.setParameter("offset", offset);
query.setParameter("end", end);
List<Invoice> list = query.getResultList();
em.close();
return list;
}
// 主任转发发票
public boolean transmitInvoice(Integer invoiceId, Date invoEtime, Integer receiverId) {
EntityManager em = emf.createEntityManager();
try {
em.getTransaction().begin();
String selectSql = " update invoice set `invo_state` = :invo_state ,`receiver_id` = :receiver_id ,`invo_etime` = :invo_etime where invo_id =:invo_id ";
Query query = em.createNativeQuery(selectSql);
query.setParameter("invo_state", InvoiceStatus.waitdealing.value);
query.setParameter("invo_id", invoiceId);
query.setParameter("invo_etime", invoEtime);
query.setParameter("receiver_id", receiverId);
query.executeUpdate();
em.flush();
em.getTransaction().commit();
} finally {
em.close();
}
return true;
}
// 根据权限,全部状态,页码 查找发票
@SuppressWarnings("unchecked")
@Override
public List<Invoice> findByAllAndPerm(String permission, Integer user_id, Pager pager) {
EntityManager em = emf.createEntityManager();
StringBuilder sql = new StringBuilder();
sql.append("select * from invoice where invo_isdelete=0");
if (permission.contains("bInvoAdd")) {// 开发票权限(主任、设总)
if (permission.contains("tInvoAudit")) {// 审核发票权限(主任)
sql.append(" and audit_id=:user_id");
} else {
sql.append(" and creator_id=:user_id");
}
sql.append(" and invo_state in(0,1,2)");
} else {// 执行人(文书)
sql.append(" and receiver_id=:user_id");
sql.append(" and invo_state in(1,2)");
}
sql.append(" order by invo_id desc limit :offset,:end");
Query query = em.createNativeQuery(sql.toString(), Invoice.class);
query.setParameter("user_id", user_id);
query.setParameter("offset", pager.getOffset()).setParameter("end", pager.getLimit());
List<Invoice> list = query.getResultList();
em.close();
return list;
}
// 根据权限,状态,页码 查找发票
@SuppressWarnings("unchecked")
@Override
public List<Invoice> findByStateAndPerm(Integer invoState, String permission, Integer user_id, Pager pager) {
EntityManager em = emf.createEntityManager();
StringBuilder sql = new StringBuilder();
sql.append("select * from invoice where invo_isdelete=0 and invo_state=:invoState");
if (permission.contains("bInvoAdd")) {// 开发票权限(主任、设总)
if (permission.contains("tInvoAudit")) {// 审核发票权限(主任)
sql.append(" and audit_id=:user_id");
} else {
sql.append(" and creator_id=:user_id");
}
} else {// 执行人(文书)
sql.append(" and receiver_id=:user_id");
}
sql.append(" order by invo_id desc limit :offset,:end");
Query query = em.createNativeQuery(sql.toString(), Invoice.class);
query.setParameter("user_id", user_id).setParameter("invoState", invoState);
query.setParameter("offset", pager.getOffset()).setParameter("end", pager.getLimit());
List<Invoice> list = query.getResultList();
em.close();
return list;
}
// 根据权限,全部状态,页码 查找发票总条数
@Override
public Integer countByAllAndPerm(String permission, Integer user_id) {
EntityManager em = emf.createEntityManager();
StringBuilder sql = new StringBuilder();
sql.append("select count(invo_id) from invoice where invo_isdelete=0");
if (permission.contains("bInvoAdd")) {// 开发票权限(主任、设总)
if (permission.contains("tInvoAudit")) {// 审核发票权限(主任)
sql.append(" and audit_id=:user_id");
} else {
sql.append(" and creator_id=:user_id");
}
sql.append(" and invo_state in(0,1,2)");
} else {// 执行人(文书)
sql.append(" and receiver_id=:user_id");
sql.append(" and invo_state in(1,2)");
}
Query query = em.createNativeQuery(sql.toString());
query.setParameter("user_id", user_id);
BigInteger totalRow = (BigInteger) query.getSingleResult();
em.close();
return totalRow.intValue();
}
// 根据权限,状态,页码 查找发票总条数
@Override
public Integer countByStateAndPerm(Integer invoState, String permission, Integer user_id) {
EntityManager em = emf.createEntityManager();
StringBuilder sql = new StringBuilder();
sql.append("select count(invo_id) from invoice where invo_isdelete=0 and invo_state=:invoState");
if (permission.contains("bInvoAdd")) {// 开发票权限(主任、设总)
if (permission.contains("tInvoAudit")) {// 审核发票权限(主任)
sql.append(" and audit_id=:user_id");
} else {
sql.append(" and creator_id=:user_id");
}
} else {// 执行人(文书)
sql.append(" and receiver_id=:user_id");
}
Query query = em.createNativeQuery(sql.toString());
query.setParameter("user_id", user_id).setParameter("invoState", invoState);
BigInteger totalRow = (BigInteger) query.getSingleResult();
em.close();
return totalRow.intValue();
}
// 根据合同ID,全部状态,页码 查找发票
@SuppressWarnings("unchecked")
@Override
public List<Invoice> findByAllAndContId(Integer cont_id, Pager pager) {
EntityManager em = emf.createEntityManager();
StringBuilder sql = new StringBuilder();
sql.append("select * from invoice where invo_isdelete=0 and contract_id=:cont_id");
sql.append(" order by invo_id desc limit :offset,:end");
Query query = em.createNativeQuery(sql.toString(), Invoice.class);
query.setParameter("cont_id", cont_id);
query.setParameter("offset", pager.getOffset()).setParameter("end", pager.getLimit());
List<Invoice> list = query.getResultList();
em.close();
return list;
}
// 根据合同ID,状态,页码 查找发票
@SuppressWarnings("unchecked")
@Override
public List<Invoice> findByStateAndContId(Integer invoState, Integer cont_id, Pager pager) {
EntityManager em = emf.createEntityManager();
StringBuilder sql = new StringBuilder();
sql.append("select * from invoice where invo_isdelete=0 and invo_state=:invoState and contract_id=:cont_id");
sql.append(" order by invo_id desc limit :offset,:end");
Query query = em.createNativeQuery(sql.toString(), Invoice.class);
query.setParameter("invoState", invoState).setParameter("cont_id", cont_id);
query.setParameter("offset", pager.getOffset()).setParameter("end", pager.getLimit());
List<Invoice> list = query.getResultList();
em.close();
return list;
}
// 根据合同ID,全部状态,页码 查找发票总条数
@Override
public Integer countByAllAndContId(Integer cont_id) {
EntityManager em = emf.createEntityManager();
StringBuilder sql = new StringBuilder();
sql.append("select count(invo_id) from invoice where invo_isdelete=0 and contract_id=:cont_id");
Query query = em.createNativeQuery(sql.toString());
query.setParameter("cont_id", cont_id);
BigInteger totalRow = (BigInteger) query.getSingleResult();
em.close();
return totalRow.intValue();
}
// 根据合同ID,状态,页码 查找发票总条数
@Override
public Integer countByStateAndContId(Integer invoState, Integer cont_id) {
EntityManager em = emf.createEntityManager();
StringBuilder sql = new StringBuilder();
sql.append(
"select count(invo_id) from invoice where invo_isdelete=0 and invo_state=:invoState and contract_id=:cont_id");
Query query = em.createNativeQuery(sql.toString());
query.setParameter("invoState", invoState).setParameter("cont_id", cont_id);
BigInteger totalRow = (BigInteger) query.getSingleResult();
em.close();
return totalRow.intValue();
}
// 根据合同ID获取已完成发票总条数
@Override
public Integer countTotalRow(Integer cont_id) {
EntityManager em = emf.createEntityManager();
StringBuilder sql = new StringBuilder();
sql.append(
"select count(invo_id) from invoice where invo_isdelete=0 and invo_state=:invo_state and contract_id=:cont_id");
Query query = em.createNativeQuery(sql.toString());
query.setParameter("cont_id", cont_id).setParameter("invo_state", InvoiceStatus.finish.value);
BigInteger totalRow = (BigInteger) query.getSingleResult();
em.close();
return totalRow.intValue();
}
}