package com.lgx8.gateway.dao.impl;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.transaction.annotation.Transactional;
import com.lgx8.common.PageArgument;
import com.lgx8.common.PageList;
import com.lgx8.common.dao.impl.BaseDao;
import com.lgx8.gateway.dao.IGatewayCategoryDao;
import com.lgx8.gateway.dao.IGatewayCategoryDetailDao;
import com.lgx8.gateway.entities.GatewayCategory;
import com.lgx8.gateway.entities.GatewayCategoryDetail;
@SuppressWarnings("unchecked")
public class GatewayCategoryDetailDao extends BaseDao implements IGatewayCategoryDetailDao {
private IGatewayCategoryDao gatewayCategoryDao;
public IGatewayCategoryDao getGatewayCategoryDao() {
return gatewayCategoryDao;
}
public void setGatewayCategoryDao(IGatewayCategoryDao gatewayCategoryDao) {
this.gatewayCategoryDao = gatewayCategoryDao;
}
public List<GatewayCategoryDetail> findGatewayCategoryDetailByCategoryId(
Integer categoryId) {
String hql = "from GatewayCategoryDetail g where g.enabled = true";
hql += " and g.category.id = " + categoryId;
hql += " order by g.layerOrder asc";
List<GatewayCategoryDetail> detail = getHibernateTemplate().find(hql);
return detail;
}
public PageList findPageGatewayCategoryDetailByCategoryId(Integer categoryId,PageArgument argment) {
String hql = "from GatewayCategoryDetail g where g.enabled = true";
hql += " and g.category.id =? ";
hql += " order by g.id,g.layerOrder asc";
Object[] o = new Object[]{categoryId};
return gatewayCategoryDao.findByPage4Report(hql, o, argment.getCurPage(), argment.getPageSize());
}
@Transactional
public GatewayCategoryDetail saveGatewayCategoryDetail(GatewayCategory category,
String entityId, String entityUrl,String entityName, String layerOrder, Integer type,String areaNode,String url,String otherUrl) {
GatewayCategoryDetail detail = new GatewayCategoryDetail();
detail.setCategory(category);
detail.setEnabled(true);
if(!"null".equals(entityId)&&!"".equals(entityId)&&entityId!=null)
detail.setEntityId(entityId);
if(!"null".equals(entityUrl)&&!"".equals(entityUrl)&&entityUrl!=null)detail.setEntityUrl(entityUrl);
if(!"null".equals(otherUrl)&&!"".equals(otherUrl)&&otherUrl!=null)detail.setOtherUrl(otherUrl);
if(!"null".equals(areaNode)&&!"".equals(areaNode)&&areaNode!=null)detail.setAreaNode(areaNode);
if(!"null".equals(url)&&!"".equals(url)&&url!=null)detail.setUrl(url);
if("".equals(layerOrder) || layerOrder == null || "null".equals(layerOrder))
{
String hql = "from GatewayCategoryDetail d where d.enabled = true and d.category.id = " + category.getId();
hql += " order by d.layerOrder desc";
List<GatewayCategoryDetail> details = getHibernateTemplate().find(hql);
if(details.size() == 0)
{
detail.setLayerOrder("0001");
}else
{
Pattern pattern = Pattern.compile("([0-9]+)*");
Matcher m = pattern.matcher(details.get(0).getLayerOrder());
boolean b = m.matches();
if(b)
{
Integer order = Integer.parseInt(details.get(0).getLayerOrder());
String orderStr = "";
order ++;
if(order < 10)
{
orderStr = "000"+order;
}else if(order < 100)
{
orderStr = "00"+order;
}else if(order < 1000)
{
orderStr = "0"+order;
}else
{
orderStr = ""+order;
}
detail.setLayerOrder(orderStr);
}else
{
detail.setLayerOrder(details.get(0).getLayerOrder()+"1");
}
}
}else
detail.setLayerOrder(layerOrder);
detail.setType(type);
detail.setEntityName(entityName);
getHibernateTemplate().persist(detail);
return detail;
}
@Transactional
public void updateGatewayCategoryDetails(Integer categoryId, String params) {
String id = null;
String layerOrder = null;
String[] ps = params.split(",");
for(String param : ps)
{
id = param.split(":")[0];
layerOrder = param.split(":")[1];
updateGatewayCategoryDetail(categoryId,Integer.parseInt(id),layerOrder);
}
}
@Transactional
public GatewayCategoryDetail updateGatewayCategoryDetail(
Integer categoryId, Integer id, String layerOrder) {
GatewayCategory category = gatewayCategoryDao.findGatewayCategoryById(categoryId);
GatewayCategoryDetail detail = getHibernateTemplate().get(GatewayCategoryDetail.class, id);
detail.setCategory(category);
detail.setLayerOrder(layerOrder);
getHibernateTemplate().update(detail);
return detail;
}
@Transactional
public void deleteGatewayCategoryDetail(Integer id) {
GatewayCategoryDetail detail = getHibernateTemplate().get(GatewayCategoryDetail.class, id);
getHibernateTemplate().delete(detail);
}
@Transactional
public void saveGatewayOrder(final List insertedRecords , final List updatedList, final List deletedRecords ) {
Session session=this.getSession();
for (Object o : updatedList) {
Map m = (HashMap)o;
String hql = "update GatewayCategoryDetail g set g.layerOrder = ? where g.id = ?";
Query query = session.createQuery(hql);
query.setString(0,(String)m.get("layerOrder"));
query.setInteger(1,(Integer)m.get("id"));
query.executeUpdate();
}
}
public GatewayCategoryDetail findGatewayCategoryDetailById(Integer id) {
return getHibernateTemplate().get(GatewayCategoryDetail.class, id);
}
@Transactional
public void updateGatewayCategoryDetail(
GatewayCategoryDetail gatewayGategoryDetail) {
getHibernateTemplate().update(gatewayGategoryDetail);
}
public PageList findPageGatewayCategoryDetailByCategoryId(
Integer categoryId, String areaNode, PageArgument argment) {
String hql = "from GatewayCategoryDetail g where g.enabled = true";
hql += " and g.category.id =? ";
if(!"".equals(areaNode)&&areaNode != null)
{
hql += " and g.areaNode =? ";
}
hql += " order by g.id,g.layerOrder asc";
Object[] o = new Object[]{categoryId};
if(!"".equals(areaNode)&&areaNode != null)
{
o = new Object[]{categoryId,areaNode};
}
return gatewayCategoryDao.findByPage4Report(hql, o, argment.getCurPage(), argment.getPageSize());
}
}