diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/SessionQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/SessionQueries.java index 214b29238..9d712730e 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/SessionQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/SessionQueries.java @@ -495,6 +495,62 @@ public class SessionQueries { }; } + public static Query averagePlaytimePerPlayer(long after, long before, UUID serverUUID) { + return database -> { + String selectPlaytimePerPlayer = SELECT + + SessionsTable.USER_UUID + "," + + "SUM(" + SessionsTable.SESSION_END + '-' + SessionsTable.SESSION_START + ") as playtime" + + FROM + SessionsTable.TABLE_NAME + + WHERE + SessionsTable.SESSION_END + "<=?" + + AND + SessionsTable.SESSION_START + ">=?" + + AND + SessionsTable.SERVER_UUID + "=?" + + GROUP_BY + SessionsTable.USER_UUID; + String selectAverage = SELECT + "AVG(playtime) as average" + FROM + '(' + selectPlaytimePerPlayer + ") q1"; + + return database.query(new QueryStatement(selectAverage, 100) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setLong(1, before); + statement.setLong(2, after); + statement.setString(3, serverUUID.toString()); + } + + @Override + public Long processResults(ResultSet set) throws SQLException { + return set.next() ? set.getLong("average") : 0; + } + }); + }; + } + + public static Query averageAfkPerPlayer(long after, long before, UUID serverUUID) { + return database -> { + String selectAfkPerPlayer = SELECT + + SessionsTable.USER_UUID + "," + + "SUM(" + SessionsTable.AFK_TIME + ") as afk" + + FROM + SessionsTable.TABLE_NAME + + WHERE + SessionsTable.SESSION_END + "<=?" + + AND + SessionsTable.SESSION_START + ">=?" + + AND + SessionsTable.SERVER_UUID + "=?" + + GROUP_BY + SessionsTable.USER_UUID; + String selectAverage = SELECT + "AVG(afk) as average" + FROM + '(' + selectAfkPerPlayer + ") q1"; + + return database.query(new QueryStatement(selectAverage, 100) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setLong(1, before); + statement.setLong(2, after); + statement.setString(3, serverUUID.toString()); + } + + @Override + public Long processResults(ResultSet set) throws SQLException { + return set.next() ? set.getLong("average") : 0; + } + }); + }; + } + public static Query afkTime(long after, long before, UUID serverUUID) { String sql = SELECT + "SUM(" + SessionsTable.AFK_TIME + ") as afk_time" + FROM + SessionsTable.TABLE_NAME + diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/json/PlayerBaseOverviewJSONParser.java b/Plan/common/src/main/java/com/djrapitops/plan/system/json/PlayerBaseOverviewJSONParser.java index cff85ca66..e59e30904 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/json/PlayerBaseOverviewJSONParser.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/json/PlayerBaseOverviewJSONParser.java @@ -44,8 +44,8 @@ public class PlayerBaseOverviewJSONParser implements TabJSONParser timeAmountFormatter; - private Formatter percentageFormatter; + private Formatter timeAmount; + private Formatter percentage; @Inject public PlayerBaseOverviewJSONParser( @@ -56,8 +56,8 @@ public class PlayerBaseOverviewJSONParser implements TabJSONParser createJSONAsMap(UUID serverUUID) { @@ -88,33 +88,32 @@ public class PlayerBaseOverviewJSONParser implements TabJSONParser - Comparing 15 days + Comparing 30d ago to Now 30 days ago Now