diff --git a/http-api/src/main/java/net/runelite/http/api/item/ItemPrice.java b/http-api/src/main/java/net/runelite/http/api/item/ItemPrice.java index 26896c5351..faf5bfc3fb 100644 --- a/http-api/src/main/java/net/runelite/http/api/item/ItemPrice.java +++ b/http-api/src/main/java/net/runelite/http/api/item/ItemPrice.java @@ -32,4 +32,5 @@ public class ItemPrice private int id; private String name; private int price; + private int wikiPrice; } diff --git a/http-service/src/main/java/net/runelite/http/service/item/ItemController.java b/http-service/src/main/java/net/runelite/http/service/item/ItemController.java index a4906e3ffd..e546344d4c 100644 --- a/http-service/src/main/java/net/runelite/http/service/item/ItemController.java +++ b/http-service/src/main/java/net/runelite/http/service/item/ItemController.java @@ -24,12 +24,12 @@ */ package net.runelite.http.service.item; -import com.google.common.base.Supplier; import com.google.common.base.Suppliers; import com.google.common.hash.HashCode; import com.google.common.hash.Hasher; import com.google.common.hash.Hashing; import java.util.concurrent.TimeUnit; +import java.util.function.Supplier; import net.runelite.http.api.item.ItemPrice; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -83,11 +83,24 @@ public class ItemController itemPrice.setId(priceEntry.getItem()); itemPrice.setName(priceEntry.getName()); itemPrice.setPrice(priceEntry.getPrice()); + itemPrice.setWikiPrice(computeWikiPrice(priceEntry)); return itemPrice; }) .toArray(ItemPrice[]::new)), priceCache, TimeUnit.MINUTES); } + private static int computeWikiPrice(PriceEntry priceEntry) + { + if (priceEntry.getLow() > 0 && priceEntry.getHigh() > 0) + { + return (priceEntry.getLow() + priceEntry.getHigh()) / 2; + } + else + { + return Math.max(priceEntry.getLow(), priceEntry.getHigh()); + } + } + @GetMapping("/prices") public ResponseEntity prices() { diff --git a/http-service/src/main/java/net/runelite/http/service/item/ItemService.java b/http-service/src/main/java/net/runelite/http/service/item/ItemService.java index 50520401ee..d25621260e 100644 --- a/http-service/src/main/java/net/runelite/http/service/item/ItemService.java +++ b/http-service/src/main/java/net/runelite/http/service/item/ItemService.java @@ -30,7 +30,6 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.time.Instant; -import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Random; @@ -141,7 +140,7 @@ public class ItemService } } - private List fetchPrice(int itemId) + private void fetchPrice(int itemId) { RSPrices rsprice; try @@ -151,12 +150,11 @@ public class ItemService catch (IOException ex) { log.warn("unable to fetch price for item {}", itemId, ex); - return null; + return; } try (Connection con = sql2o.beginTransaction()) { - List entries = new ArrayList<>(); Instant now = Instant.now(); Query query = con.createQuery("insert into prices (item, price, time, fetched_time) values (:item, :price, :time, :fetched_time) " @@ -169,13 +167,6 @@ public class ItemService Instant time = Instant.ofEpochMilli(ts); - PriceEntry priceEntry = new PriceEntry(); - priceEntry.setItem(itemId); - priceEntry.setPrice(price); - priceEntry.setTime(time); - priceEntry.setFetched_time(now); - entries.add(priceEntry); - query .addParameter("item", itemId) .addParameter("price", price) @@ -186,8 +177,6 @@ public class ItemService query.executeBatch(); con.commit(false); - - return entries; } } @@ -195,9 +184,11 @@ public class ItemService { try (Connection con = sql2o.beginTransaction()) { - Query query = con.createQuery("select t2.item, t3.name, t2.time, prices.price, prices.fetched_time from (select t1.item as item, max(t1.time) as time from prices t1 group by item) t2 " + - " join prices on t2.item=prices.item and t2.time=prices.time" + - " join items t3 on t2.item=t3.id"); + Query query = con.createQuery("select t2.item, t3.name, t2.time, prices.price, prices.fetched_time, t4.high, t4.low" + + " from (select t1.item as item, max(t1.time) as time from prices t1 group by item) t2" + + " join prices on t2.item=prices.item and t2.time=prices.time" + + " join items t3 on t2.item=t3.id" + + " join wiki_prices t4 on t2.item=t4.item_id"); return query.executeAndFetch(PriceEntry.class); } } diff --git a/http-service/src/main/java/net/runelite/http/service/item/PriceEntry.java b/http-service/src/main/java/net/runelite/http/service/item/PriceEntry.java index 00f0e6815c..4d29d7e98d 100644 --- a/http-service/src/main/java/net/runelite/http/service/item/PriceEntry.java +++ b/http-service/src/main/java/net/runelite/http/service/item/PriceEntry.java @@ -35,4 +35,6 @@ class PriceEntry private int price; private Instant time; private Instant fetched_time; + private int high; + private int low; }