hide incorrect offers
- illegal buy offers, - illegal sell offers if haven't black market, - legal offers if haven't market
This commit is contained in:
@@ -2,14 +2,10 @@ package ru.trader.analysis;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import ru.trader.core.Offer;
|
||||
import ru.trader.core.Order;
|
||||
import ru.trader.core.SERVICE_TYPE;
|
||||
import ru.trader.core.Vendor;
|
||||
import ru.trader.core.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class MarketUtils {
|
||||
private final static Logger LOG = LoggerFactory.getLogger(MarketUtils.class);
|
||||
@@ -48,7 +44,8 @@ public class MarketUtils {
|
||||
LOG.trace("Get orders from {}, to {}", seller, buyer);
|
||||
List<Order> orders = new ArrayList<>();
|
||||
if (seller.isTransit() || buyer.isTransit()) return orders;
|
||||
for (Offer sell : seller.getAllSellOffers()) {
|
||||
for (Iterator<Offer> iterator = seller.getSellOffers().iterator(); iterator.hasNext(); ) {
|
||||
Offer sell = iterator.next();
|
||||
Offer buy = buyer.getBuy(sell.getItem());
|
||||
if (buy != null) {
|
||||
Order order = new Order(sell, buy, 1);
|
||||
@@ -60,6 +57,26 @@ public class MarketUtils {
|
||||
return orders;
|
||||
}
|
||||
|
||||
public static boolean isIncorrect(Offer offer){
|
||||
return offer != null && isIncorrect(offer.getVendor(), offer.isIllegal(), offer.getType());
|
||||
}
|
||||
|
||||
public static boolean isIncorrect(Vendor vendor, Item item, OFFER_TYPE type){
|
||||
return isIncorrect(vendor, item.isIllegal(vendor), type);
|
||||
}
|
||||
|
||||
public static boolean isIncorrect(Vendor vendor, boolean isIllegal, OFFER_TYPE type){
|
||||
if (type == OFFER_TYPE.SELL){
|
||||
return isIllegal || !vendor.has(SERVICE_TYPE.MARKET);
|
||||
} else {
|
||||
return isIllegal ? !vendor.has(SERVICE_TYPE.BLACK_MARKET) : !vendor.has(SERVICE_TYPE.MARKET);
|
||||
}
|
||||
}
|
||||
|
||||
public static Stream<Offer> getOffers(Collection<Offer> offers){
|
||||
return offers.stream().filter(o -> !isIncorrect(o));
|
||||
}
|
||||
|
||||
public static boolean hasMarket(Vendor vendor) {
|
||||
return vendor.has(SERVICE_TYPE.MARKET) || vendor.has(SERVICE_TYPE.BLACK_MARKET);
|
||||
}
|
||||
|
||||
@@ -49,7 +49,8 @@ public class RouteFiller {
|
||||
LOG.trace("Fill orders for {}", seller);
|
||||
final int nextIndex = i+1;
|
||||
Collection<Vendor> vendors = route.getVendors(nextIndex);
|
||||
for (Offer sell : seller.getAllSellOffers()) {
|
||||
for (Iterator<Offer> iterator = seller.getSellOffers().iterator(); iterator.hasNext(); ) {
|
||||
Offer sell = iterator.next();
|
||||
for (Vendor buyer : vendors) {
|
||||
Offer buy = buyer.getBuy(sell.getItem());
|
||||
if (buy != null) {
|
||||
|
||||
@@ -111,7 +111,8 @@ public class MarketAnalyzer {
|
||||
callback.start(sellers.size());
|
||||
for (Vendor vendor : sellers) {
|
||||
if (callback.isCancel()) break;
|
||||
for (Offer sell : vendor.getAllSellOffers()) {
|
||||
for (Iterator<Offer> iterator = vendor.getSellOffers().iterator(); iterator.hasNext(); ) {
|
||||
Offer sell = iterator.next();
|
||||
if (callback.isCancel()) break;
|
||||
LOG.trace("Sell offer {}", sell);
|
||||
if (sell.getCount() == 0) continue;
|
||||
@@ -148,7 +149,8 @@ public class MarketAnalyzer {
|
||||
callback.start(sellers.size());
|
||||
for (Vendor seller : sellers) {
|
||||
if (callback.isCancel()) break;
|
||||
for (Offer sell : seller.getAllSellOffers()) {
|
||||
for (Iterator<Offer> iterator = seller.getSellOffers().iterator(); iterator.hasNext(); ) {
|
||||
Offer sell = iterator.next();
|
||||
if (callback.isCancel()) break;
|
||||
if (sell.getCount() == 0) continue;
|
||||
long count = Order.getMaxCount(sell, profile.getBalance(), profile.getShip().getCargo());
|
||||
@@ -157,7 +159,7 @@ public class MarketAnalyzer {
|
||||
for (Vendor buyer : buyers) {
|
||||
if (callback.isCancel()) break;
|
||||
Offer buy = buyer.getBuy(sell.getItem());
|
||||
if (buy != null){
|
||||
if (buy != null) {
|
||||
Order order = new Order(sell, buy, count);
|
||||
LOG.trace("Buy offer {} profit = {}", buy, order.getProfit());
|
||||
if (order.getProfit() < lowProfit) {
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
package ru.trader.core;
|
||||
|
||||
import ru.trader.analysis.MarketUtils;
|
||||
import ru.trader.analysis.graph.Connectable;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public interface Vendor extends Connectable<Vendor> {
|
||||
|
||||
@@ -55,24 +57,34 @@ public interface Vendor extends Connectable<Vendor> {
|
||||
return get(OFFER_TYPE.SELL);
|
||||
}
|
||||
|
||||
default Stream<Offer> getSellOffers(){
|
||||
return MarketUtils.getOffers(getAllSellOffers());
|
||||
}
|
||||
|
||||
default Collection<Offer> getAllBuyOffers(){
|
||||
return get(OFFER_TYPE.BUY);
|
||||
}
|
||||
|
||||
default Stream<Offer> getBuyOffers(){
|
||||
return MarketUtils.getOffers(getAllBuyOffers());
|
||||
}
|
||||
|
||||
default Offer getSell(Item item){
|
||||
return get(OFFER_TYPE.SELL, item);
|
||||
Offer offer = get(OFFER_TYPE.SELL, item);
|
||||
return MarketUtils.isIncorrect(offer) ? null : offer;
|
||||
}
|
||||
|
||||
default Offer getBuy(Item item){
|
||||
return get(OFFER_TYPE.BUY, item);
|
||||
Offer offer = get(OFFER_TYPE.BUY, item);
|
||||
return MarketUtils.isIncorrect(offer) ? null : offer;
|
||||
}
|
||||
|
||||
default boolean hasSell(Item item){
|
||||
return has(OFFER_TYPE.SELL, item);
|
||||
return has(OFFER_TYPE.SELL, item) && !MarketUtils.isIncorrect(this, item, OFFER_TYPE.SELL);
|
||||
}
|
||||
|
||||
default boolean hasBuy(Item item){
|
||||
return has(OFFER_TYPE.BUY, item);
|
||||
return has(OFFER_TYPE.BUY, item) && !MarketUtils.isIncorrect(this, item, OFFER_TYPE.BUY);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -46,6 +46,8 @@ public class RouteFillerTest extends Assert {
|
||||
ITEM3 = market.addItem("ITEM3", null);
|
||||
v1 = market.addPlace("p1",0,0,0).addVendor("v1");
|
||||
v2 = market.addPlace("p2",0,0,0).addVendor("v2");
|
||||
v1.add(SERVICE_TYPE.MARKET);
|
||||
v2.add(SERVICE_TYPE.MARKET);
|
||||
v1.addOffer(OFFER_TYPE.SELL, ITEM1, 100, -1);
|
||||
v1.addOffer(OFFER_TYPE.SELL, ITEM2, 200, -1);
|
||||
v1.addOffer(OFFER_TYPE.SELL, ITEM3, 300, -1);
|
||||
@@ -88,6 +90,9 @@ public class RouteFillerTest extends Assert {
|
||||
v1 = market.addPlace("p1",0,0,0).addVendor("v1");
|
||||
v2 = market.addPlace("p2",0,0,0).addVendor("v2");
|
||||
v3 = market.addPlace("p3",0,0,0).addVendor("v3");
|
||||
v1.add(SERVICE_TYPE.MARKET);
|
||||
v2.add(SERVICE_TYPE.MARKET);
|
||||
v3.add(SERVICE_TYPE.MARKET);
|
||||
v1.addOffer(OFFER_TYPE.SELL, ITEM1, 100, -1);
|
||||
v1.addOffer(OFFER_TYPE.SELL, ITEM3, 300, -1);
|
||||
v2.addOffer(OFFER_TYPE.SELL, ITEM2, 200, -1);
|
||||
@@ -134,6 +139,10 @@ public class RouteFillerTest extends Assert {
|
||||
v2 = market.addPlace("p2",0,0,0).addVendor("v2");
|
||||
v3 = market.addPlace("p3",0,0,0).addVendor("v3");
|
||||
v4 = market.addPlace("p4",0,0,0).addVendor("v4");
|
||||
v1.add(SERVICE_TYPE.MARKET);
|
||||
v2.add(SERVICE_TYPE.MARKET);
|
||||
v3.add(SERVICE_TYPE.MARKET);
|
||||
v4.add(SERVICE_TYPE.MARKET);
|
||||
v1.addOffer(OFFER_TYPE.SELL, ITEM1, 100, -1);
|
||||
v1.addOffer(OFFER_TYPE.SELL, ITEM2, 200, -1);
|
||||
v1.addOffer(OFFER_TYPE.SELL, ITEM3, 300, -1);
|
||||
@@ -216,6 +225,11 @@ public class RouteFillerTest extends Assert {
|
||||
v3 = market.addPlace("p3",0,0,0).addVendor("v3");
|
||||
v4 = market.addPlace("p4",0,0,0).addVendor("v4");
|
||||
v5 = market.addPlace("p5",0,0,0).addVendor("v5");
|
||||
v1.add(SERVICE_TYPE.MARKET);
|
||||
v2.add(SERVICE_TYPE.MARKET);
|
||||
v3.add(SERVICE_TYPE.MARKET);
|
||||
v4.add(SERVICE_TYPE.MARKET);
|
||||
v5.add(SERVICE_TYPE.MARKET);
|
||||
v1.addOffer(OFFER_TYPE.SELL, ITEM1, 410, -1);
|
||||
v1.addOffer(OFFER_TYPE.SELL, ITEM2, 200, -1);
|
||||
v1.addOffer(OFFER_TYPE.SELL, ITEM3, 300, -1);
|
||||
@@ -277,6 +291,10 @@ public class RouteFillerTest extends Assert {
|
||||
v2 = market.addPlace("p2",0,0,0).addVendor("v2");
|
||||
v3 = market.addPlace("p3",0,0,0).addVendor("v3");
|
||||
v4 = market.addPlace("p4",0,0,0).addVendor("v4");
|
||||
v1.add(SERVICE_TYPE.MARKET);
|
||||
v2.add(SERVICE_TYPE.MARKET);
|
||||
v3.add(SERVICE_TYPE.MARKET);
|
||||
v4.add(SERVICE_TYPE.MARKET);
|
||||
v1.addOffer(OFFER_TYPE.SELL, ITEM1, 100, 5);
|
||||
v1.addOffer(OFFER_TYPE.SELL, ITEM2, 200, 5);
|
||||
v1.addOffer(OFFER_TYPE.SELL, ITEM3, 300, 5);
|
||||
@@ -363,6 +381,8 @@ public class RouteFillerTest extends Assert {
|
||||
ITEM4 = market.addItem("ITEM4", null);
|
||||
v1 = market.addPlace("p1",0,0,0).addVendor("v1");
|
||||
v2 = market.addPlace("p2",0,1,0).addVendor("v2");
|
||||
v1.add(SERVICE_TYPE.MARKET);
|
||||
v2.add(SERVICE_TYPE.MARKET);
|
||||
v1.addOffer(OFFER_TYPE.SELL, ITEM1, 100, -1);
|
||||
v1.addOffer(OFFER_TYPE.SELL, ITEM2, 200, -1);
|
||||
v1.addOffer(OFFER_TYPE.SELL, ITEM3, 300, -1);
|
||||
@@ -382,6 +402,8 @@ public class RouteFillerTest extends Assert {
|
||||
LOG.info("Init test 6B");
|
||||
v3 = market.addPlace("p3",0,1,1).addVendor("v3");
|
||||
v4 = market.addPlace("p4",1,1,1).addVendor("v4");
|
||||
v3.add(SERVICE_TYPE.MARKET);
|
||||
v4.add(SERVICE_TYPE.MARKET);
|
||||
|
||||
v3.addOffer(OFFER_TYPE.SELL, ITEM3, 390, -1);
|
||||
|
||||
@@ -523,6 +545,10 @@ public class RouteFillerTest extends Assert {
|
||||
v2 = market.addPlace("p2",0,0,0).addVendor("v2");
|
||||
v3 = market.addPlace("p3",0,0,0).addVendor("v3");
|
||||
v4 = market.addPlace("p4",0,0,0).addVendor("v4");
|
||||
v1.add(SERVICE_TYPE.MARKET);
|
||||
v2.add(SERVICE_TYPE.MARKET);
|
||||
v3.add(SERVICE_TYPE.MARKET);
|
||||
v4.add(SERVICE_TYPE.MARKET);
|
||||
v1.addOffer(OFFER_TYPE.SELL, ITEM1, 100, 5);
|
||||
v1.addOffer(OFFER_TYPE.SELL, ITEM2, 200, 5);
|
||||
v1.addOffer(OFFER_TYPE.SELL, ITEM3, 300, 5);
|
||||
@@ -591,6 +617,10 @@ public class RouteFillerTest extends Assert {
|
||||
v2 = market.addPlace("p2",0,0,0).addVendor("v2");
|
||||
v3 = market.addPlace("p3",0,0,0).addVendor("v3");
|
||||
v4 = market.addPlace("p4",0,0,0).addVendor("v4");
|
||||
v1.add(SERVICE_TYPE.MARKET);
|
||||
v2.add(SERVICE_TYPE.MARKET);
|
||||
v3.add(SERVICE_TYPE.MARKET);
|
||||
v4.add(SERVICE_TYPE.MARKET);
|
||||
v1.addOffer(OFFER_TYPE.SELL, ITEM1, 100, 5);
|
||||
v1.addOffer(OFFER_TYPE.SELL, ITEM2, 200, 5);
|
||||
v1.addOffer(OFFER_TYPE.SELL, ITEM3, 300, 5);
|
||||
|
||||
@@ -25,8 +25,10 @@ public class VendorTest extends Assert {
|
||||
public void fillVendor(){
|
||||
sellVendor = new SimpleVendor();
|
||||
sellVendor.add(SELL_OFFER);
|
||||
sellVendor.add(SERVICE_TYPE.MARKET);
|
||||
buyVendor = new SimpleVendor();
|
||||
buyVendor.add(BUY_OFFER);
|
||||
buyVendor.add(SERVICE_TYPE.MARKET);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -39,12 +39,14 @@ public class VendorTest2 extends Assert {
|
||||
sellVendor.add(SELL_OFFER2);
|
||||
sellVendor.add(SELL_OFFER3);
|
||||
sellVendor.add(DUBLE_SELL_OFFER1);
|
||||
sellVendor.add(SERVICE_TYPE.MARKET);
|
||||
|
||||
buyVendor = new SimpleVendor();
|
||||
buyVendor.add(BUY_OFFER1);
|
||||
buyVendor.add(BUY_OFFER2);
|
||||
buyVendor.add(BUY_OFFER3);
|
||||
buyVendor.add(DUBLE_BUY_OFFER1);
|
||||
buyVendor.add(SERVICE_TYPE.MARKET);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user