Archived
0

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:
iMoHax
2016-03-14 16:23:49 +03:00
parent 01fc65ec94
commit 5c482b16f2
9 changed files with 94 additions and 20 deletions

View File

@@ -131,14 +131,22 @@ public class StationModel {
return market.getModeler().get(station.getPlace());
}
public List<OfferModel> getSells() {
public List<OfferModel> getAllSells() {
return station.getAllSellOffers().stream().map(this::asModel).collect(Collectors.toList());
}
public List<OfferModel> getBuys() {
public List<OfferModel> getSells() {
return station.getSellOffers().map(this::asModel).collect(Collectors.toList());
}
public List<OfferModel> getAllBuys() {
return station.getAllBuyOffers().stream().map(this::asModel).collect(Collectors.toList());
}
public List<OfferModel> getBuys() {
return station.getBuyOffers().map(this::asModel).collect(Collectors.toList());
}
public OfferModel add(OFFER_TYPE type, ItemModel item, double price, long count){
OfferModel offer = asModel(station.addOffer(type, ModelFabric.get(item), price, count), item);
LOG.info("Add offer {} to station {}", offer, station);

View File

@@ -72,8 +72,8 @@ public class StationUpdater {
for (SERVICE_TYPE service : station.getServices()) {
serviceProperty(service).set(true);
}
station.getSells().forEach(this::fillOffer);
station.getBuys().forEach(this::fillOffer);
station.getAllSells().forEach(this::fillOffer);
station.getAllBuys().forEach(this::fillOffer);
} else {
name.setValue("");
type.setValue(null);

View File

@@ -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);
}

View File

@@ -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) {

View File

@@ -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());

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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

View File

@@ -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