/**
*
*/
package com.mvc.dao.impl;
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.IsDelete;
import com.base.enums.ReceiveMoneyStatus;
import com.base.enums.RemoStatus;
import com.mvc.dao.ReceiveMoneyDao;
import com.mvc.entity.ReceiveMoney;
/**
* 到款
*
* @author zjn
* @date 2016年10月27日
*/
@Repository("receiveMoneyDaoImpl")
public class ReceiveMoneyDaoImpl implements ReceiveMoneyDao {
@Autowired
@Qualifier("entityManagerFactory")
EntityManagerFactory emf;
// 根据合同ID获取已到款钱数
@SuppressWarnings("unchecked")
@Override
public Float receiveMoneyByContId(Integer contId) {
EntityManager em = emf.createEntityManager();
String countSql = " select coalesce(sum(remo_amoney),0) from receive_money r where cont_id=:cont_id and remo_state=:remo_state and remo_isdelete=:remo_isdelete";
Query query = em.createNativeQuery(countSql);
query.setParameter("cont_id", contId);
query.setParameter("remo_state", RemoStatus.finish.value);
query.setParameter("remo_isdelete", IsDelete.NO.value);
List<Object> result = query.getResultList();
em.close();
return Float.valueOf(result.get(0).toString());
}
// 根据参数获取该合同的所有到款记录
@SuppressWarnings("unchecked")
@Override
public List<ReceiveMoney> findListByParam(Integer contId, Integer remoState, Integer offset, Integer end) {
EntityManager em = emf.createEntityManager();
String selectSql = "";
if (remoState != ReceiveMoneyStatus.all.value) {
selectSql += "select * from receive_money where cont_id =:cont_id and remo_state=:remo_state and remo_isdelete=:remo_isdelete";
} else {
selectSql += "select * from receive_money where cont_id =:cont_id and remo_isdelete=:remo_isdelete";
}
selectSql += " order by remo_id desc limit :offset, :end";
Query query = em.createNativeQuery(selectSql, ReceiveMoney.class);
query.setParameter("cont_id", contId);
if (remoState != ReceiveMoneyStatus.all.value) {
query.setParameter("remo_state", remoState);
}
query.setParameter("remo_isdelete", IsDelete.NO.value);
query.setParameter("offset", offset);
query.setParameter("end", end);
List<ReceiveMoney> list = query.getResultList();
em.close();
return list;
}
// 根据参数获取该合同的所有到款记录总条数
@SuppressWarnings("unchecked")
@Override
public Integer countByParam(Integer contId, Integer remoState) {
EntityManager em = emf.createEntityManager();
String countSql = "";
if (remoState != ReceiveMoneyStatus.all.value) {
countSql += "select count(*) from receive_money where cont_id =:cont_id and remo_state=:remo_state and remo_isdelete=:remo_isdelete";
} else {
countSql += "select count(*) from receive_money where cont_id =:cont_id and remo_isdelete=:remo_isdelete";
}
Query query = em.createNativeQuery(countSql);
query.setParameter("cont_id", contId);
if (remoState != ReceiveMoneyStatus.all.value) {
query.setParameter("remo_state", remoState);
}
query.setParameter("remo_isdelete", IsDelete.NO.value);
List<Object> result = query.getResultList();
em.close();
return Integer.parseInt(result.get(0).toString());
}
// 审核到款记录
@Override
public Boolean updateRemoStateById(Integer remoId, Float remoAmoney) {
EntityManager em = emf.createEntityManager();
try {
em.getTransaction().begin();
String selectSql = " update receive_money set remo_amoney=:remo_amoney,remo_state=:remo_state where remo_id =:remo_id ";
Query query = em.createNativeQuery(selectSql);
query.setParameter("remo_id", remoId);
query.setParameter("remo_amoney", remoAmoney);
query.setParameter("remo_state", ReceiveMoneyStatus.finish.value);
query.executeUpdate();
em.flush();
em.getTransaction().commit();
} finally {
em.close();
}
return true;
}
// 根据状态查询到款记录
@SuppressWarnings("unchecked")
@Override
public List<ReceiveMoney> findListByState(Integer userId, Integer remoState, Integer offset, Integer end) {
EntityManager em = emf.createEntityManager();
String selectSql = "";
if (remoState != ReceiveMoneyStatus.all.value) {
selectSql += "select * from receive_money where (operater_id =:operater_id or creater_id=:creater_id) and remo_state=:remo_state and remo_isdelete=:remo_isdelete";
} else {
selectSql += "select * from receive_money where operater_id =:operater_id or creater_id=:creater_id and remo_isdelete=:remo_isdelete";
}
selectSql += " order by remo_id desc limit :offset, :end";
Query query = em.createNativeQuery(selectSql, ReceiveMoney.class);
query.setParameter("operater_id", userId);
query.setParameter("creater_id", userId);
if (remoState != ReceiveMoneyStatus.all.value) {
query.setParameter("remo_state", remoState);
}
query.setParameter("remo_isdelete", IsDelete.NO.value);
query.setParameter("offset", offset);
query.setParameter("end", end);
List<ReceiveMoney> list = query.getResultList();
em.close();
return list;
}
// 根据状态查询到款记录总条数
@SuppressWarnings("unchecked")
@Override
public Integer countByState(Integer userId, Integer remoState) {
EntityManager em = emf.createEntityManager();
String countSql = "";
if (remoState != ReceiveMoneyStatus.all.value) {
countSql += "select count(*) from receive_money where (operater_id =:operater_id or creater_id=:creater_id) and remo_state=:remo_state and remo_isdelete=:remo_isdelete";
} else {
countSql += "select count(*) from receive_money where operater_id =:operater_id or creater_id=:creater_id and remo_isdelete=:remo_isdelete";
}
Query query = em.createNativeQuery(countSql);
query.setParameter("operater_id", userId);
query.setParameter("creater_id", userId);
if (remoState != ReceiveMoneyStatus.all.value) {
query.setParameter("remo_state", remoState);
}
query.setParameter("remo_isdelete", IsDelete.NO.value);
List<Object> result = query.getResultList();
em.close();
return Integer.parseInt(result.get(0).toString());
}
// 根据到款ID删除到款记录
@Override
public Boolean delete(Integer remoId) {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
try {
String updateSql = " update receive_money set remo_isdelete =:remo_isdelete where remo_id =:remo_id ";
Query query = em.createNativeQuery(updateSql);
query.setParameter("remo_id", remoId);
query.setParameter("remo_isdelete", IsDelete.YES.value);
query.executeUpdate();
em.flush();
em.getTransaction().commit();
} finally {
em.close();
}
return true;
}
}