package com.hongqiang.shop.modules.content.dao; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import org.springframework.stereotype.Repository; import com.hongqiang.shop.common.base.persistence.BaseDaoImpl; import com.hongqiang.shop.common.base.persistence.Page; import com.hongqiang.shop.common.utils.Filter; import com.hongqiang.shop.common.utils.Order; import com.hongqiang.shop.common.utils.Pageable; import com.hongqiang.shop.modules.entity.Article; import com.hongqiang.shop.modules.entity.ArticleCategory; import com.hongqiang.shop.modules.entity.Tag; @Repository public class ArticleDaoImpl extends BaseDaoImpl<Article,Long> implements ArticleDaoCustom { @Override public List<Article> findList(ArticleCategory articleCategory, List<Tag> tags, Integer count, List<Filter> filters, List<Order> orders) { String qlString = "select DISTINCT article from Article article where 1=1 and article.isPublication = true "; List<Object> parameter = new ArrayList<Object>(); if (articleCategory != null){ qlString += " and (article.articleCategory = ? or article.articleCategory.treePath like ?) "; parameter.add(articleCategory); parameter.add("%," + articleCategory.getId() + "," + "%"); } if ((tags != null) && (!tags.isEmpty())){ qlString += " and (article.tags in (?)"; parameter.add(tags); } qlString += " order by article.isTop DESC "; return super.findList(qlString, parameter,null, count, filters, orders); } @Override public List<Article> findList(ArticleCategory articleCategory, Date beginDate, Date endDate, Integer first, Integer count) { String qlString = "select DISTINCT article from Article article where 1=1 and article.isPublication = true "; List<Object> parameter = new ArrayList<Object>(); if (articleCategory != null){ qlString += " and (article.articleCategory = ? or article.articleCategory.treePath like ?) "; parameter.add(articleCategory); parameter.add("%," + articleCategory.getId() + "," + "%"); } if (beginDate != null){ qlString += " and article.createDate >= ? "; parameter.add(beginDate); } if (endDate != null){ qlString += " and article.createDate <= ? "; parameter.add(endDate); } qlString += " order by article.isTop DESC "; return super.findList(qlString, parameter,first, count, null, null); } @Override public List<Article> findList(Integer first, Integer count, List<Filter> filters, List<Order> orders){ String qlString = "select article from Article article where 1=1 "; List<Object> parameter = new ArrayList<Object>(); return super.findList(qlString, parameter, first, count, filters, orders); } @Override public Page<Article> findPage(Pageable pageable){ String qlString = "select article from Article article where 1=1 "; List<Object> parameter = new ArrayList<Object>(); return super.findPage(qlString, parameter, pageable) ; } @Override public Page<Article> findPage(ArticleCategory articleCategory, List<Tag> tags, Pageable pageable) { String qlString = "select DISTINCT article from Article article where 1=1 and article.isPublication = true "; List<Object> parameter = new ArrayList<Object>(); if (articleCategory != null){ qlString += " and (article.articleCategory = ? or article.articleCategory.treePath like ?) "; parameter.add(articleCategory); parameter.add("%," + articleCategory.getId() + "," + "%"); } if ((tags != null) && (!tags.isEmpty())){ qlString += " and (article.tags in (?)"; parameter.add(tags); } qlString += " order by article.isTop DESC "; return super.findPage(qlString, parameter, pageable); } @Override public long count(){ Filter [] filters = null; return count(filters); } @Override public long count(Filter[] filters){ String qlString = "select DISTINCT article from Article article where 1=1 "; StringBuilder stringBuilder = new StringBuilder(qlString); List<Object> params = new ArrayList<Object>(); if (filters == null) { return super.count(stringBuilder,null, params); } return super.count(stringBuilder,Arrays.asList(filters), params); } }