/** * Copyright (c)2010-2011 Enterprise Website Content Management System(EWCMS), All rights reserved. * EWCMS PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * http://www.ewcms.com */ package com.ewcms.plugin.online.web; import java.text.DateFormat; import java.text.SimpleDateFormat; import com.ewcms.common.query.Resultable; import com.ewcms.common.query.jpa.HqlQueryable; import com.ewcms.common.query.jpa.QueryFactory; import com.ewcms.web.QueryBaseAction; import com.ewcms.common.lang.EmptyUtil; /** * * @author 吴智俊 */ public class MatterArticleQueryAction extends QueryBaseAction { private static final long serialVersionUID = 5355642552995277216L; private DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private Integer workingBodyId; private Integer channelId; public Integer getWorkingBodyId() { return workingBodyId; } public void setWorkingBodyId(Integer workingBodyId) { this.workingBodyId = workingBodyId; } public Integer getChannelId() { return channelId; } public void setChannelId(Integer channelId) { this.channelId = channelId; } @Override protected Resultable queryResult(QueryFactory queryFactory, String cacheKey, int rows, int page, Order order) { String hql = "Select r From WorkingBody As c Right Join c.articleMains AS r Right Join r.article AS a Where a.delete=false And c.id=:workingBodyId And c.channelId=:channelId "; String countHql = "Select count(r.id) From WorkingBody As c Right Join c.articleMains AS r Right Join r.article AS a Where a.delete=false And c.id=:workingBodyId And c.channelId=:channelId "; Integer id = getParameterValue(Integer.class, "id", "查询编号错误,应该是整型"); if (EmptyUtil.isNotNull(id)){ hql += " And r.id=:id "; countHql += " And r.id=:id"; } String title = getParameterValue(String.class, "title", ""); if (EmptyUtil.isNotNull(title)){ hql += " And a.title Like :title"; countHql += " And a.title Like :title"; } hql += " Order By Case When r.top Is Null Then 1 Else 0 End, r.top Desc, r.sort Asc, Case When a.published Is Null Then 1 Else 0 End, a.published Desc, Case When a.modified Is Null Then 1 Else 0 End, a.modified Desc, r.id Desc "; hql += " Limit " + rows + " OffSet " + (rows * (page + 1)); HqlQueryable query = queryFactory.createHqlQuery(hql, countHql); if (EmptyUtil.isNotNull(id)){ query.setParameter("id", id); } if (EmptyUtil.isNotNull(title)){ query.setParameter("title", "%" + title + "%"); } query.setParameter("workingBodyId", getWorkingBodyId()); query.setParameter("channelId", getChannelId()); setDateFormat(DATE_FORMAT); return query.setRow(rows).setPage(page).queryResult(); } @Override protected Resultable querySelectionsResult(QueryFactory queryFactory, int rows, int page, String[] selections, Order order) { String hql = "Select r From WorkingBody As c Right Join c.articleRmcs AS r RIGHT JOIN r.article AS a Where a.delete=false And r.id In (:id) And c.id=:workingBodyId And c.channelId=:channelId Order By Case When r.top Is Null Then 1 Else 0 End, r.top Desc, r.sort Asc, Case When a.published Is Null Then 1 Else 0 End, a.published Desc, Case When a.modified Is Null Then 1 Else 0 End, a.modified Desc, r.id"; String countHql = "Select count(r.id) From WorkingBody As c Right Join c.articleRmcs AS r RIGHT JOIN r.article a Where a.delete=false And r.id In (:id) And c.id=:workingBodyId And c.channelId=:channelId"; HqlQueryable query = queryFactory.createHqlQuery(hql, countHql); query.setParameter("id", getIds(Integer.class)); query.setParameter("workingBodyId", getWorkingBodyId()); query.setParameter("channelId", getChannelId()); setDateFormat(DATE_FORMAT); return query.queryResult(); } }