Commit 4ef4c8ea authored by Liang Ding's avatar Liang Ding

🎨 分类对象加入文章计数

parent 03744eaa
......@@ -21,7 +21,7 @@ package org.b3log.solo.model;
* This class defines all category model relevant keys.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.1.0.0, Mar 30, 2017
* @version 1.2.0.0, Sep 11, 2019
* @since 2.0.0
*/
public final class Category {
......@@ -67,6 +67,11 @@ public final class Category {
*/
public static final String CATEGORY_T_TAGS = "categoryTags";
/**
* Key of category published article count.
*/
public static final String CATEGORY_T_PUBLISHED_ARTICLE_COUNT = "categoryPublishedArticleCount";
/**
* Private constructor.
*/
......
......@@ -18,22 +18,21 @@
package org.b3log.solo.repository;
import org.b3log.latke.Keys;
import org.b3log.latke.ioc.BeanManager;
import org.b3log.latke.repository.*;
import org.b3log.latke.repository.annotation.Repository;
import org.b3log.solo.model.Article;
import org.b3log.solo.model.Category;
import org.b3log.solo.model.Tag;
import org.json.JSONArray;
import org.json.JSONObject;
import java.text.Collator;
import java.util.Collections;
import java.util.List;
/**
* Category repository.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.2.0.2, Sep 30, 2018
* @version 1.2.0.3, Sep 11, 2019
* @since 2.0.0
*/
@Repository
......@@ -176,7 +175,26 @@ public class CategoryRepository extends AbstractRepository {
final Query query = new Query().addSort(Category.CATEGORY_ORDER, SortDirection.ASCENDING).
setPage(1, num).setPageCount(1);
final List<JSONObject> ret = getList(query);
Collections.sort(ret, (o1, o2) -> Collator.getInstance(java.util.Locale.CHINA).compare(o1.optString(Tag.TAG_TITLE), o2.optString(Tag.TAG_TITLE)));
final BeanManager beanManager = BeanManager.getInstance();
final ArticleRepository articleRepository = beanManager.getReference(ArticleRepository.class);
final TagArticleRepository tagArticleRepository = beanManager.getReference(TagArticleRepository.class);
final CategoryTagRepository categoryTagRepository = beanManager.getReference(CategoryTagRepository.class);
for (final JSONObject category : ret) {
final String categoryId = category.optString(Keys.OBJECT_ID);
final StringBuilder queryCount = new StringBuilder("SELECT count(DISTINCT(b3_solo_article.oId)) as C FROM ");
final StringBuilder queryStr = new StringBuilder(articleRepository.getName() + " AS b3_solo_article,").
append(tagArticleRepository.getName() + " AS b3_solo_tag_article").
append(" WHERE b3_solo_article.oId=b3_solo_tag_article.article_oId ").
append(" AND b3_solo_article.").append(Article.ARTICLE_STATUS).append("=").append(Article.ARTICLE_STATUS_C_PUBLISHED).
append(" AND ").append("b3_solo_tag_article.tag_oId").append(" IN (").
append("SELECT tag_oId FROM ").append(categoryTagRepository.getName() + " AS b3_solo_category_tag WHERE b3_solo_category_tag.category_oId = ").
append(categoryId).append(")");
final List<JSONObject> articlesCountResult = select(queryCount.append(queryStr.toString()).toString());
final int articleCount = articlesCountResult == null ? 0 : articlesCountResult.get(0).optInt("C");
category.put(Category.CATEGORY_T_PUBLISHED_ARTICLE_COUNT, articleCount);
}
return ret;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment