/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.conant.order.dao.hibernate;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.HibernateTemplate;
import com.conant.order.dao.OrderDao;
import com.conant.order.util.Logger;
import com.conant.order.util.ProcessException;
import com.conant.order.vo.HbOrder;
import com.conant.order.vo.LensDetail;
import com.conant.order.vo.OrderQuerier;
import com.conant.order.vo.OrsOrder;
import com.conant.order.vo.QuerierResult;
/**
*
* @author Administrator
*/
public class OrderDaoImpl implements OrderDao
{
private static final Logger log = Logger.getLogger("OrderDaoImpl",
Logger.DEBUG, true);
private HibernateTemplate template;
public void setTemplate(HibernateTemplate template) throws ProcessException
{
this.template = template;
}
public List getOrdersByUsername(String username) throws ProcessException
{
List list = template
.find("from OrsOrder orsorder where orsorder.clientname = '"
+ username + "'");
return list;
}
public OrsOrder getOrder(int orderId) throws ProcessException
{
OrsOrder order = null;
try
{
order = (OrsOrder)template.load(OrsOrder.class, new Integer(orderId));
}
catch(Exception ex)
{
ex.printStackTrace();
throw new ProcessException(120001);
}
return order;
}
public void saveOrder(OrsOrder order) throws ProcessException
{
try
{
if(order != null)
{
template.saveOrUpdate(order);
}
else
{
throw new ProcessException(217001);
}
}
catch(Exception ex)
{
ex.printStackTrace();
throw new ProcessException(120001);
}
}
public void deleteOrder(OrsOrder order) throws ProcessException
{
try
{
if(order != null)
{
template.delete(order);
}
else
{
throw new ProcessException(217001);
}
}
catch(Exception ex)
{
ex.printStackTrace();
throw new ProcessException(120001);
}
}
public void deleteOrders(List<OrsOrder> orders) throws ProcessException
{
try
{
if(orders != null && orders.size() > 0)
{
List<OrsOrder> listOrders = new ArrayList<OrsOrder>();
for(Object order : orders)
{
OrsOrder item = getOrder(((OrsOrder)order).getId());
if(item != null)
{
listOrders.add((OrsOrder)item);
}
}
template.deleteAll(listOrders);
}
else
{
throw new ProcessException(217001);
}
}
catch(Exception ex)
{
ex.printStackTrace();
throw new ProcessException(120001);
}
}
public OrderQuerier getOrders(OrderQuerier querier)
throws ProcessException
{
DetachedCriteria queryCriteria = DetachedCriteria.forClass(OrsOrder.class);
DetachedCriteria countCriteria = DetachedCriteria.forClass(OrsOrder.class);
try
{
if(querier == null)
{
throw new ProcessException(217001);
}
// query by field
// by id
if(querier.getId() != null)
{
queryCriteria.add(Restrictions.eq("id", Integer
.valueOf(querier.getId())));
countCriteria.add(Restrictions.eq("id", Integer
.valueOf(querier.getId())));
}
// by order type
if(querier.getOrdertype() != null)
{
log.debugT("OrderDaoImpl: order type === " + querier.getId());
queryCriteria.add(Restrictions.eq("ordertype", Integer
.valueOf(querier.getOrdertype())));
countCriteria.add(Restrictions.eq("ordertype", Integer
.valueOf(querier.getOrdertype())));
}
// by order status
if(querier.getOrderstatus() != null)
{
log.debugT("OrderDaoImpl: order status === "
+ querier.getOrderstatus());
queryCriteria.add(Restrictions.eq("orderstatus", Integer
.valueOf(querier.getOrderstatus())));
countCriteria.add(Restrictions.eq("orderstatus", Integer
.valueOf(querier.getOrderstatus())));
}
// by client name
if(querier.getClientname() != null)
{
log.debugT("OrderDaoImpl: client name === "
+ querier.getClientname());
queryCriteria.add(Restrictions.eq("clientname", querier
.getClientname()));
countCriteria.add(Restrictions.eq("clientname", querier
.getClientname()));
}
// by telephone
if(querier.getTelephone() != null)
{
log.debugT("OrderDaoImpl: telephone === "
+ querier.getTelephone());
queryCriteria.add(Restrictions.eq("telephone", querier
.getTelephone()));
countCriteria.add(Restrictions.eq("telephone", querier
.getTelephone()));
}
// by ordered date
if(querier.getOrdereddate() != null)
{
log.debugT("OrderDaoImpl: ordered date === "
+ querier.getClientname());
queryCriteria.add(Restrictions.eq("ordereddate", querier
.getOrdereddate()));
countCriteria.add(Restrictions.eq("ordereddate", querier
.getOrdereddate()));
}
// by requested date
if(querier.getRequesteddate() != null)
{
log.debugT("OrderDaoImpl: requested date === "
+ querier.getClientname());
queryCriteria.add(Restrictions.eq("requesteddate", querier
.getRequesteddate()));
countCriteria.add(Restrictions.eq("requesteddate", querier
.getRequesteddate()));
}
// by remarks
if(querier.getRemarks() != null)
{
log.debugT("OrderDaoImpl: remarks === " + querier.getRemarks());
queryCriteria.add(Restrictions.eq("remarks", querier
.getRemarks()));
countCriteria.add(Restrictions.eq("remarks", querier
.getRemarks()));
}
// audited order
if(querier.isFilterAuditedOrders())
{
log.debugT("OrderDaoImpl: filter audited orders ");
queryCriteria.add(Restrictions.isNotNull("auditeddate"));
countCriteria.add(Restrictions.isNotNull("auditeddate"));
}
// query total count
Session session = template.getSessionFactory().openSession();
int recordCount = ((Integer)countCriteria.getExecutableCriteria(
session).setProjection(Projections.rowCount())
.uniqueResult()).intValue();
session.close();
log.debugT("OrderDaoImpl: totalCount === " + recordCount);
// order by
if(querier.getOrders() != null)
{
for(Order order : querier.getOrders())
{
if(order != null)
{
queryCriteria.addOrder(order);
}
}
}
else
{
Order idOrder = new HbOrder("id", false);
querier.setOrders(new Order[]
{ idOrder });
}
// pagination
if(querier.getStartIndex() < 0)
{
querier.setStartIndex(0);
}
if(querier.getPageSize() <= 0)
{
querier.setPageSize(20);
}
List list = template.findByCriteria(queryCriteria, querier
.getStartIndex(), querier.getPageSize());
querier.setListOrder(list);
querier.setRecordCount(recordCount);
if(recordCount >= 0)
{
if(querier.getPageSize() > querier.getRecordCount())
{
querier.setPageCount(1);
}
else
{
int pageCount = recordCount / querier.getPageSize();
if(recordCount % querier.getPageSize() != 0)
{
pageCount++;
}
querier.setPageCount(pageCount);
}
}
return querier;
}
catch(Exception e)
{
log.exception(e);
throw new ProcessException(120001);
}
}
}