Java tutorial
/** * Copyright © 2012-2013 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); */ package com.hongqiang.shop.modules.cms.service; import java.util.Date; import java.util.List; import org.apache.commons.beanutils.ConvertUtils; import org.apache.commons.lang3.StringEscapeUtils; import org.apache.commons.lang3.time.DateUtils; import org.apache.lucene.index.Term; import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanClause.Occur; import org.apache.lucene.search.BooleanQuery; import org.apache.lucene.search.Sort; import org.apache.lucene.search.TermQuery; import org.apache.shiro.SecurityUtils; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.google.common.collect.Lists; import com.hongqiang.shop.common.persistence.Page; import com.hongqiang.shop.common.service.BaseService; import com.hongqiang.shop.common.utils.CacheUtils; import com.hongqiang.shop.common.utils.StringUtils; import com.hongqiang.shop.modules.cms.dao.ArticleDao; import com.hongqiang.shop.modules.cms.dao.CategoryDao; import com.hongqiang.shop.modules.cms.entity.Article; import com.hongqiang.shop.modules.cms.entity.Category; import com.hongqiang.shop.modules.cms.entity.Site; import com.hongqiang.shop.modules.sys.utils.UserUtils; /** * Service * @author ThinkGem * @version 2013-05-15 */ @Service @Transactional(readOnly = true) public class ArticleService extends BaseService { @Autowired private ArticleDao articleDao; @Autowired private CategoryDao categoryDao; public Article get(Long id) { return articleDao.findOne(id); } public Page<Article> find(Page<Article> page, Article article, boolean isDataScopeFilter) { // ??6?? Date updateExpiredWeightDate = (Date) CacheUtils.get("updateExpiredWeightDateByArticle"); if (updateExpiredWeightDate == null || (updateExpiredWeightDate != null && updateExpiredWeightDate.getTime() < new Date().getTime())) { articleDao.updateExpiredWeight(); CacheUtils.put("updateExpiredWeightDateByArticle", DateUtils.addHours(new Date(), 6)); } DetachedCriteria dc = articleDao.createDetachedCriteria(); dc.createAlias("category", "category"); dc.createAlias("category.site", "category.site"); if (article.getCategory() != null && article.getCategory().getId() != null && !Category.isRoot(article.getCategory().getId())) { Category category = categoryDao.findOne(article.getCategory().getId()); if (category != null) { dc.add(Restrictions.or(Restrictions.eq("category.id", category.getId()), Restrictions.like("category.parentIds", "%," + category.getId() + ",%"))); dc.add(Restrictions.eq("category.site.id", category.getSite().getId())); article.setCategory(category); } else { dc.add(Restrictions.eq("category.site.id", Site.getCurrentSiteId())); } } else { dc.add(Restrictions.eq("category.site.id", Site.getCurrentSiteId())); } if (StringUtils.isNotEmpty(article.getTitle())) { dc.add(Restrictions.like("title", "%" + article.getTitle() + "%")); } if (StringUtils.isNotEmpty(article.getPosid())) { dc.add(Restrictions.like("posid", "%," + article.getPosid() + ",%")); } if (StringUtils.isNotEmpty(article.getImage()) && Article.YES.equals(article.getImage())) { dc.add(Restrictions.and(Restrictions.isNotNull("image"), Restrictions.ne("image", ""))); } if (article.getCreateBy() != null && article.getCreateBy().getId() > 0) { dc.add(Restrictions.eq("createBy.id", article.getCreateBy().getId())); } if (isDataScopeFilter) { dc.createAlias("category.office", "categoryOffice").createAlias("createBy", "createBy"); dc.add(dataScopeFilter(UserUtils.getUser(), "categoryOffice", "createBy")); } dc.add(Restrictions.eq(Article.DEL_FLAG, article.getDelFlag())); if (StringUtils.isBlank(page.getOrderBy())) { dc.addOrder(Order.desc("weight")); dc.addOrder(Order.desc("updateDate")); } return articleDao.find(page, dc); } @Transactional(readOnly = false) public void save(Article article) { if (article.getArticleData().getContent() != null) { article.getArticleData() .setContent(StringEscapeUtils.unescapeHtml4(article.getArticleData().getContent())); } // ???? if (!SecurityUtils.getSubject().isPermitted("cms:article:audit")) { article.setDelFlag(Article.DEL_FLAG_AUDIT); } // ????? if (article.getCategory() != null && article.getCategory().getId() != null) { Category category = categoryDao.findOne(article.getCategory().getId()); if (!Article.YES.equals(category.getIsAudit())) { article.setDelFlag(Article.DEL_FLAG_NORMAL); } } article.setUpdateBy(UserUtils.getUser()); article.setUpdateDate(new Date()); articleDao.clear(); articleDao.save(article); } @Transactional(readOnly = false) public void delete(Long id, Boolean isRe) { // articleDao.updateDelFlag(id, isRe!=null&&isRe?Article.DEL_FLAG_NORMAL:Article.DEL_FLAG_DELETE); // ? Article article = articleDao.findOne(id); article.setDelFlag(isRe != null && isRe ? Article.DEL_FLAG_NORMAL : Article.DEL_FLAG_DELETE); articleDao.save(article); } /** * ?? * @return new Object[]{?Id,Id,} */ public List<Object[]> findByIds(String ids) { List<Object[]> list = Lists.newArrayList(); Long[] idss = (Long[]) ConvertUtils.convert(StringUtils.split(ids, ","), Long.class); if (idss.length > 0) { List<Article> l = articleDao.findByIdIn(idss); for (Article e : l) { list.add(new Object[] { e.getCategory().getId(), e.getId(), StringUtils.abbr(e.getTitle(), 50) }); } } return list; } /** * */ @Transactional(readOnly = false) public void updateHitsAddOne(Long id) { articleDao.updateHitsAddOne(id); } /** * */ public void createIndex() { articleDao.createIndex(); } /** * */ public Page<Article> search(Page<Article> page, String q) { // ? BooleanQuery query = articleDao.getFullTextQuery(q, "title", "keywords", "description", "articleData.content"); // ? BooleanQuery queryFilter = articleDao.getFullTextQuery( new BooleanClause(new TermQuery(new Term(Article.DEL_FLAG, Article.DEL_FLAG_NORMAL)), Occur.MUST)); // ?? Sort sort = null;//new Sort(new SortField("updateDate", SortField.DOC, true)); // articleDao.search(page, query, queryFilter, sort); // articleDao.keywordsHighlight(query, page.getList(), 30, "title"); articleDao.keywordsHighlight(query, page.getList(), 130, "description", "articleData.content"); return page; } }