package com.javaweb.cms.service; import cn.hutool.cache.Cache; import cn.hutool.cache.CacheUtil; import com.alibaba.fastjson.JSON; import com.github.pagehelper.PageHelper; import com.google.common.collect.Lists; import com.javaweb.cms.domain.*; import com.javaweb.cms.util.CmsConstants; import com.javaweb.common.core.page.PageDomain; import com.javaweb.common.core.page.TableSupport; import com.javaweb.common.utils.StringUtils; import com.javaweb.common.utils.sql.SqlUtil; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.support.ResourceRegion; import org.springframework.stereotype.Service; import java.util.Collections; import java.util.List; import java.util.Map; @Service("cms") public class CmsService { @Autowired private IFriendLinkService friendLinkService; @Autowired private IWebSiteService webSiteService; @Autowired private ITagsService tagsService; @Autowired private ICategoryService categoryService; @Autowired private IArticleService articleService; @Autowired private IAlbumService albumService; @Autowired private IShortWordsService shortWordsService; @Autowired private ICommentService commentService; @Autowired private IResourceService resourceService; private Cache siteInfoCache= CacheUtil.newTimedCache(1000*60*10);//10分钟有效时间,过期后重新数据库取值 private static final String KEY_SITE_INFO="siteInfo"; private static final String KEY_FRIEND_LINKS="friendLinks"; private static final String KEY_TAGS="tags"; private static final String KEY_CATEGORY="category"; private static final String KEY_INDEX_LIST="indexList"; private static final String KEY_RECENT_LIST="recentList"; private static final String KEY_RECOMMENDED_LIST="recommendedList"; private static final String KEY_HOT_LIST="hotList"; private static final String KEY_TOP_LIST="topList"; private static final String KEY_FOCUS_LIST="focusList"; private static final String KEY_NEW_COMMENT_LIST="newCommentList"; private static final String KEY_RECOMMENDED_LIST_RES="recommendedList_res";//推荐资源 /** * 清空前台缓存 */ public void clearCache(){ siteInfoCache.clear(); } public Object getFriendLinks(){ List list= (List) siteInfoCache.get(KEY_FRIEND_LINKS,false); if(list==null){ FriendLink form= new FriendLink(); form.setAuditState(CmsConstants.AUDIT_STATE_AGREE); list= friendLinkService.selectFriendLinkList(form); siteInfoCache.put(KEY_FRIEND_LINKS,list); } return list; } public Object getSiteInfo(){ Map map=(Map)siteInfoCache.get(KEY_SITE_INFO,false);//注意第二个参数false表示每次取值后定时时间不重新计算 if(map==null){ map = webSiteService.getSiteInfo(); siteInfoCache.put(KEY_SITE_INFO,map); } return map; } /** * 获得标签云 * @return */ public Object getTagsCloud(){ List list = ( List)siteInfoCache.get(KEY_TAGS,false); if(list==null){ list = tagsService.selectTagsAll(); siteInfoCache.put(KEY_TAGS,list); } return list; } /** * 查询导航栏目 * @return */ public Object selectNavCategories(){ List list=( List)siteInfoCache.get(KEY_CATEGORY,false); if(list==null){ Category queryForm=new Category(); list =categoryService.selectNavCategories(queryForm); siteInfoCache.put(KEY_CATEGORY,list); } return list; } /** * 首页的文章列表 * @return */ public List
indexList(Integer limit){ if(limit==null){ limit=1; } List
list=( List
)siteInfoCache.get(KEY_INDEX_LIST,false); if(list==null){ Article form=new Article(); list=articleService.selectArticlesRegionNotNull(form); siteInfoCache.put(KEY_INDEX_LIST,list); } if(CollectionUtils.isNotEmpty(list)){ //这类文章一般不会太多,全部取出来之后,随机取limit条 if(list.size()>limit){ Collections.shuffle(list); list=list.subList(0,limit); } } return list; } /** * 最新文章列表 * @return */ public List
recentList(Integer limit){ if(limit==null){ limit=1; } List
list=( List
)siteInfoCache.get(KEY_RECENT_LIST,false); if(list==null){ list=articleService.selectArticlesByArticleRegionType(ArticleRegionType.REGION_NEW); siteInfoCache.put(KEY_RECENT_LIST,list); } if(CollectionUtils.isNotEmpty(list)){ //这类文章一般不会太多,全部取出来之后,随机取limit条 if(list.size()>limit){ Collections.shuffle(list); list=list.subList(0,limit); } } return list; } /** * 推荐文章列表 * @return */ public List
recommendedList(Integer limit){ if(limit==null){ limit=1; } List
list=( List
)siteInfoCache.get(KEY_RECOMMENDED_LIST,false); if(list==null){ list=articleService.selectArticlesByArticleRegionType(ArticleRegionType.REGION_RECOMMEND); siteInfoCache.put(KEY_RECOMMENDED_LIST,list); } if(CollectionUtils.isNotEmpty(list)){ //这类文章一般不会太多,全部取出来之后,随机取limit条 if(list.size()>limit){ Collections.shuffle(list); list=list.subList(0,limit); } } return list; } /** * 热点文章列表 * @return */ public List
hotList(Integer limit){ if(limit==null){ limit=1; } List
list=( List
)siteInfoCache.get(KEY_HOT_LIST,false); if(list==null){ list=articleService.selectArticlesByArticleRegionType(ArticleRegionType.REGION_HOT); siteInfoCache.put(KEY_HOT_LIST,list); } if(CollectionUtils.isNotEmpty(list)){ //这类文章一般不会太多,全部取出来之后,随机取limit条 if(list.size()>limit){ Collections.shuffle(list); list=list.subList(0,limit); } } return list; } /** * 置顶文章列表 * @return */ public List
topList(Integer limit){ if(limit==null){ limit=1; } List
list=( List
)siteInfoCache.get(KEY_TOP_LIST,false); if(list==null){ list=articleService.selectArticlesByArticleRegionType(ArticleRegionType.REGION_TOP); siteInfoCache.put(KEY_TOP_LIST,list); } if(CollectionUtils.isNotEmpty(list)){ //头条文章一般不会太多,全部取出来之后,随机取limit条 if(list.size()>limit){ Collections.shuffle(list); list=list.subList(0,limit); } } return list; } /** * 焦点列表 * @return */ public List
focusList(Integer limit){ if(limit==null){ limit=1; } List
list=( List
)siteInfoCache.get(KEY_FOCUS_LIST,false); if(list==null){ list=articleService.selectArticlesByArticleRegionType(ArticleRegionType.REGION_FOCUS); siteInfoCache.put(KEY_FOCUS_LIST,list); } if(CollectionUtils.isNotEmpty(list)){ //焦点文章一般不会太多,全部取出来之后,随机取limit条 if(list.size()>limit){ Collections.shuffle(list); list=list.subList(0,limit); } } return list; } private static final String KEY_FULL_TABS="fullTabs"; private static final String KEY_SHORT_WORDS="shortWords"; public List selectFullTabs(){ List list=( List)siteInfoCache.get(KEY_FULL_TABS,false); if(list==null){ list = tagsService.selectBlogTabs(); siteInfoCache.put(KEY_FULL_TABS,list); } return list; } public List selectShortWords(Integer limit){ List list=( List)siteInfoCache.get(KEY_SHORT_WORDS); if(CollectionUtils.isEmpty(list)){ list = shortWordsService.selectShortWordsList(new ShortWords()); siteInfoCache.put(KEY_SHORT_WORDS,list); } if(CollectionUtils.isNotEmpty(list)){ //焦点文章一般不会太多,全部取出来之后,随机取limit条 if(list.size()>limit){ Collections.shuffle(list); list=list.subList(0,limit); } } List res= Lists.newArrayList(); list.forEach(s->{ res.add(s.getShortWords()); }); return res; } /** * 注意:这个获取banner是为了给pnews这个前台模版准备的,它需要直接获取banner配置的图片素材 * 不要和BlogController里面的混淆了 */ public Object selectIndexBannerImgs(String code){ if(StringUtils.isEmpty(code)){ code="blog_index"; } Map data=(Map) siteInfoCache.get(code,false); if(data==null){ data= albumService.getAlbum(code); siteInfoCache.put(code,data); } if(data!=null){ Album album = JSON.parseObject(JSON.toJSONString(data),Album.class); List images=album.getImages(); return images; } return null; } /************************资源********** start ************/ /** * 推荐文章列表 * @return */ public List recommendedResourceList(Integer limit){ if(limit==null){ limit=1; } List list=( List)siteInfoCache.get(KEY_RECOMMENDED_LIST_RES,false); if(CollectionUtils.isEmpty(list)){ Resource form=new Resource(); form.setResourceRegion(ResourceRegionType.REGION_RECOMMEND.getVal()); form.setAuditState(CmsConstants.AUDIT_STATE_AGREE.toString()); form.setStatus(CmsConstants.STATUS_NORMAL); list=resourceService.selectResourceList(form); siteInfoCache.put(KEY_RECOMMENDED_LIST_RES,list); } if(CollectionUtils.isNotEmpty(list)){ //这类文章一般不会太多,全部取出来之后,随机取limit条 if(list.size()>limit){ Collections.shuffle(list); list=list.subList(0,limit); } } return list; } /************************资源********** end ************/ //Avatar模板首页获取文章和资源列表 public Object avatarIndexList(Integer limit) { if (limit == null) { limit = 10; } //8个文章+2个资源 List
articleList =this.indexList(8); articleList.forEach(a->{ a.setExtraName("article"); }); List resourceList =this.recommendedResourceList(2); resourceList.forEach(r->{ r.setExtraName("resource"); }); List res=Lists.newArrayList(); res.addAll(articleList); res.addAll(resourceList); Collections.shuffle(res); return res; } /** * 最新留言 */ public List newComments(Integer limit){ List list=(List)siteInfoCache.get(KEY_NEW_COMMENT_LIST); if(CollectionUtils.isEmpty(list)) { Comment form = new Comment(); form.setType(CmsConstants.COMMENT_TYPE_LIUYAN); form.setStatus(CmsConstants.STATUS_NORMAL); Integer pageNum = 1; Integer pageSize = limit; if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) { PageHelper.startPage(pageNum, pageSize); } list = commentService.selectCommentList(form); siteInfoCache.put(KEY_NEW_COMMENT_LIST,list); } return list; } }