From c5b9f856b5be166762bec4adc0ed0665494dbeb6 Mon Sep 17 00:00:00 2001 From: lxyer <237809796@qq.com> Date: Mon, 9 Jul 2018 23:11:19 +0800 Subject: [PATCH] . --- libs/redbbs.jar | Bin 77671 -> 71590 bytes src/com/lxyer/bbs/base/EnjoyRender.java | 1 + src/com/lxyer/bbs/base/TaskQueue.java | 44 ++++++++++++++++-- src/com/lxyer/bbs/base/kit/LxyKit.java | 20 ++++++-- src/com/lxyer/bbs/content/ContentService.java | 15 ++---- src/com/lxyer/bbs/servlet/ContentServlet.java | 10 ++-- 6 files changed, 63 insertions(+), 27 deletions(-) diff --git a/libs/redbbs.jar b/libs/redbbs.jar index 666a055e43fa270761c406b6f3c25612f483cc90..4621138f50cb692c71ec7371bcffef6014f9b210 100644 GIT binary patch delta 16382 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 diff --git a/src/com/lxyer/bbs/base/EnjoyRender.java b/src/com/lxyer/bbs/base/EnjoyRender.java index 9eb8eca..bda0486 100644 --- a/src/com/lxyer/bbs/base/EnjoyRender.java +++ b/src/com/lxyer/bbs/base/EnjoyRender.java @@ -38,6 +38,7 @@ public class EnjoyRender implements HttpRender { Map attr = scope.getAttributes(); if (attr == null) attr = Kv.create(); attr.put("mine", mine); + attr.put("token", request.getSessionid(false)); String str = template.renderToString(attr); response.setContentType("text/html; charset=UTF-8"); diff --git a/src/com/lxyer/bbs/base/TaskQueue.java b/src/com/lxyer/bbs/base/TaskQueue.java index 71d9949..4a30006 100644 --- a/src/com/lxyer/bbs/base/TaskQueue.java +++ b/src/com/lxyer/bbs/base/TaskQueue.java @@ -1,6 +1,8 @@ package com.lxyer.bbs.base; +import com.lxyer.bbs.base.kit.LxyKit; import com.lxyer.bbs.base.user.UserInfo; +import com.lxyer.bbs.base.user.UserRecord; import com.lxyer.bbs.base.user.UserService; import com.lxyer.bbs.content.Content; import com.lxyer.bbs.content.ContentInfo; @@ -8,6 +10,7 @@ import com.lxyer.bbs.content.ContentService; import com.mongodb.Block; import com.mongodb.MongoClient; import com.mongodb.client.AggregateIterable; +import com.mongodb.client.FindIterable; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.Accumulators; @@ -22,10 +25,7 @@ import org.redkale.util.AnyValue; import org.redkale.util.Sheet; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.LinkedBlockingQueue; @@ -166,4 +166,40 @@ public class TaskQueue extends BaseService implements Runnable return contentService.contentQuery(flipper, node); } + /** + * TODO:帖子访客记录 --待完成 + * @return + */ + public Sheet readRecordAsync(Flipper flipper ,int contentid){ + Bson filter = eq("uri", "/jie/detail/"+ contentid); + + FindIterable documents = visLog.find(filter).limit(flipper.getLimit()).skip(flipper.getOffset()); + long total = visLog.countDocuments(filter); + + List rows = new ArrayList<>(); + List uids = new ArrayList<>(); + documents.forEach((Block) x->{ + Integer userid = x.getInteger("userid"); + if (userid > 0) uids.add(userid); + + Map row = new HashMap(); + row.put("userid", userid); + row.put("ip", x.getString("ip")); + }); + + int[] userids = LxyKit.listToArray(uids, new int[uids.size()]); + List records = source.queryList(UserRecord.class, FilterNode.create("userid", FilterExpress.IN, userids)); + + rows.forEach(x->{ + UserRecord record = records.stream().filter(y -> (Integer) x.get("userid") == y.getUserid()).findFirst().orElse(new UserRecord()); + x.put("nickname", record.getRealname()); + x.put("avatar", record.getAvatar()); + }); + + Sheet sheet = new Sheet<>(); + sheet.setTotal(total); + sheet.setRows(rows); + + return sheet; + } } diff --git a/src/com/lxyer/bbs/base/kit/LxyKit.java b/src/com/lxyer/bbs/base/kit/LxyKit.java index ce75697..c6cceb6 100644 --- a/src/com/lxyer/bbs/base/kit/LxyKit.java +++ b/src/com/lxyer/bbs/base/kit/LxyKit.java @@ -1,6 +1,7 @@ package com.lxyer.bbs.base.kit; import java.text.SimpleDateFormat; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -53,6 +54,21 @@ public final class LxyKit { return htmlStr.trim(); //返回文本字符串 } + public static T[] listToArray(List list, T[] ts){ + for (int i = 0; i < list.size(); i++) { + ts[0] = (T) list.get(i); + } + return ts; + } + + public static int[] listToArray(List list, int[] ts){ + for (int i = 0; i < list.size(); i++) { + ts[0] = (int) list.get(i); + } + return ts; + } + + public static void main(String[] args) { Pattern p = Pattern.compile("@* "); @@ -61,10 +77,6 @@ public final class LxyKit { int count = 0; while (matcher.find()) { count++; - - - } - } } diff --git a/src/com/lxyer/bbs/content/ContentService.java b/src/com/lxyer/bbs/content/ContentService.java index 02268c4..87fb31f 100644 --- a/src/com/lxyer/bbs/content/ContentService.java +++ b/src/com/lxyer/bbs/content/ContentService.java @@ -45,7 +45,7 @@ public class ContentService extends BaseService implements UIService queryByBean(Flipper flipper, FilterBean bean){ + /*public Sheet queryByBean(Flipper flipper, FilterBean bean){ Sheet contents = source.querySheet(Content.class, flipper, bean); Sheet infos = createInfo(contents); return infos; - } + }*/ @RestMapping(name = "save", auth = true, comment = "内容保存") public RetResult contentSave(@RestParam(name = "bean")Content content, @RestSessionid String sessionid){ @@ -112,11 +112,6 @@ public class ContentService extends BaseService implements UIService contents = contentService.contentQuery(flipper, untopNode); - //热帖 - /*Flipper flipper2 = new Flipper().limit(8).sort("viewNum DESC"); - Sheet hotView = contentService.contentQuery(flipper2, "");*/ - //热议 Flipper flipper3 = new Flipper().limit(8).sort("replynum DESC"); Sheet hotReply = contentService.contentQuery(flipper3, "", sessionid); diff --git a/src/com/lxyer/bbs/servlet/ContentServlet.java b/src/com/lxyer/bbs/servlet/ContentServlet.java index 7df0fbb..a0ef8fd 100644 --- a/src/com/lxyer/bbs/servlet/ContentServlet.java +++ b/src/com/lxyer/bbs/servlet/ContentServlet.java @@ -82,16 +82,12 @@ public class ContentServlet extends BaseServlet { Flipper flipper = new Flipper().offset((curr-1) * 20).limit(20).sort("top DESC,createtime DESC"); //帖子列表 - FilterNode filterNode = FilterNode.create("status", NOTEQUAL, -1).and("type", column.getAs(para)); + FilterNode filterNode = FilterNode.create("status", NOTEQUAL, -10).and("type", column.getAs(para)); if (solved > 0) filterNode.and("solved", 20); if (wonderful > 0) filterNode.and("wonderful", 20); + Sheet contents = contentService.contentQuery(flipper, setPrivate(request, setPrivate(request, filterNode))); - Sheet contents = contentService.contentQuery(flipper, setPrivate(request,filterNode)); - - //热议 - /*Flipper flipper3 = new Flipper().limit(8).sort("replynum DESC"); - Sheet hotReply = contentService.contentQuery(flipper3, "", sessionid);*/ - + //热帖 Sheet hotView = logQueue.hotView(sessionid); Kv kv = Kv.by("contents", contents).set("hotView", hotView)