Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions src/main/java/comparators/ItemsComparator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package comparators;

import ru.leroymerlin.data.Item;

import java.math.BigDecimal;
import java.util.Comparator;

public class ItemsComparator implements Comparator<Item> {
@Override
public int compare(Item item1, Item item2) {
BigDecimal bigDecimal1 =
item1.getSum()
.multiply(BigDecimal.valueOf(item1.getQuantity()))
.multiply(item1.getCommission())
.multiply(BigDecimal.valueOf(100));
BigDecimal bigDecimal2 =
item2.getSum()
.multiply(BigDecimal.valueOf(item2.getQuantity()))
.multiply(item2.getCommission())
.multiply(BigDecimal.valueOf(100));
return bigDecimal1.intValue() - bigDecimal2.intValue();
}
}
21 changes: 21 additions & 0 deletions src/main/java/comparators/ServicesComparator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package comparators;

import ru.leroymerlin.data.Service;

import java.math.BigDecimal;
import java.util.Comparator;

public class ServicesComparator implements Comparator<Service> {
@Override
public int compare(Service service1, Service service2) {
BigDecimal bigDecimal1 =
service1.getSum()
.multiply(service1.getCommission())
.multiply(BigDecimal.valueOf(100));
BigDecimal bigDecimal2 =
service2.getSum()
.multiply(service2.getCommission())
.multiply(BigDecimal.valueOf(100));
return bigDecimal1.intValue() - bigDecimal2.intValue();
}
}
76 changes: 74 additions & 2 deletions src/main/java/ru/leroymerlin/BillingMenu.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,25 @@
package ru.leroymerlin;

import comparators.ItemsComparator;
import comparators.ServicesComparator;
import ru.leroymerlin.data.Item;
import ru.leroymerlin.data.Service;
import ru.leroymerlin.protocol.ReportType;
import ru.leroymerlin.reader.ItemReader;
import ru.leroymerlin.reader.RevenueReader;
import ru.leroymerlin.reader.ServiceReader;

import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.URISyntaxException;
import java.util.Map;
import java.util.Optional;
import java.util.Scanner;

public class BillingMenu {

public static void greeting() {
public static void greeting() throws URISyntaxException, IOException {
System.out.println("Приветствуем в билинговой системе! Что вам требуется?");
BillingMenu.print();

Expand All @@ -21,10 +36,67 @@ public static void greeting() {
}
case "1": {
// todo: ваша реализация тут
Optional<Item> itemMin = ItemReader.getItems().stream().min(new ItemsComparator());
if (itemMin.isPresent()) {
BigDecimal itemMinRevenue =
itemMin.get().getSum()
.multiply(BigDecimal.valueOf(itemMin.get().getQuantity()))
.multiply(itemMin.get().getCommission())
.divide(BigDecimal.valueOf(100), RoundingMode.HALF_UP)
.setScale(2, RoundingMode.HALF_UP);
System.out.println(
"Минимальная выручка <" + itemMinRevenue +
"> по товару <" + itemMin.get().getItemName() +
">, с комиссией <" + itemMin.get().getCommission() + ">");
}
Optional<Service> serviceMin = ServiceReader.getServices().stream().min(new ServicesComparator());
if (serviceMin.isPresent()) {
BigDecimal serviceMinRevenue =
serviceMin.get().getSum()
.multiply(serviceMin.get().getCommission())
.divide(BigDecimal.valueOf(100), RoundingMode.HALF_UP)
.setScale(2, RoundingMode.HALF_UP);
System.out.println(
"Минимальная выручка <" + serviceMinRevenue +
"> по услуге <" + serviceMin.get().getItemName() +
">, с комиссией <" + serviceMin.get().getCommission() + ">");
}
break;
}
case "2": {
// todo: ваша реализация тут
Map<ReportType, BigDecimal> revenue = RevenueReader.getRevenue();
Optional<BigDecimal> itemsRevenueOptional = ItemReader.getItems().stream()
.map(item ->
item.getSum()
.multiply(item.getCommission())
.multiply(BigDecimal.valueOf(item.getQuantity()))
.divide(BigDecimal.valueOf(100), RoundingMode.HALF_UP))
.reduce(BigDecimal::add);
if (itemsRevenueOptional.isPresent()) {
BigDecimal itemsRevenue = itemsRevenueOptional.get();
if (itemsRevenue.compareTo(revenue.get(ReportType.ITEM)) != 0) {
System.out.println(
"Выручка по товарам <" + itemsRevenue.setScale(2, RoundingMode.HALF_UP) +
"> не совпадает с выручкой из отчета <" + revenue.get(ReportType.ITEM) + ">"
);
}
}
Optional<BigDecimal> serviceRevenueOptional = ServiceReader.getServices().stream()
.map(service ->
service.getSum()
.multiply(service.getCommission())
.divide(BigDecimal.valueOf(100), RoundingMode.HALF_UP))
.reduce(BigDecimal::add);
if (serviceRevenueOptional.isPresent()) {
BigDecimal servicesRevenue = serviceRevenueOptional.get();
if (servicesRevenue.compareTo(revenue.get(ReportType.SERVICE)) != 0) {
System.out.println(
"Выручка по услугам <" + servicesRevenue +
"> не совпадает с выручкой из отчета <" + revenue.get(ReportType.SERVICE) + ">"
);
}
}
break;
}
default: {
Expand All @@ -40,4 +112,4 @@ private static void print() {
System.out.println("2 - Сверка прибыли по услугам и товарам");
System.out.println("Для завершения работы, нажмите 'q'");
}
}
}
7 changes: 5 additions & 2 deletions src/main/java/ru/leroymerlin/Main.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package ru.leroymerlin;

import java.io.IOException;
import java.net.URISyntaxException;

public class Main {

public static void main(String[] args) {
public static void main(String[] args) throws URISyntaxException, IOException {
BillingMenu.greeting();
}
}
}
12 changes: 7 additions & 5 deletions src/main/java/ru/leroymerlin/data/Item.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package ru.leroymerlin.data;

import java.math.BigDecimal;

public class Item {
private final String itemName;
private final Double sum;
private final BigDecimal sum;
private final Integer quantity;
private final Double commission;
private final BigDecimal commission;

public Item(String itemName, Double sum, Integer quantity, Double commission) {
public Item(String itemName, BigDecimal sum, Integer quantity, BigDecimal commission) {
this.quantity = quantity;
this.itemName = itemName;
this.sum = sum;
Expand All @@ -32,11 +34,11 @@ public String getItemName() {
return itemName;
}

public Double getSum() {
public BigDecimal getSum() {
return sum;
}

public Double getCommission() {
public BigDecimal getCommission() {
return commission;
}
//endregion
Expand Down
8 changes: 5 additions & 3 deletions src/main/java/ru/leroymerlin/data/Revenue.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@

import ru.leroymerlin.protocol.ReportType;

import java.math.BigDecimal;

public class Revenue {
private final ReportType reportType;
private final Double profit;
private final BigDecimal profit;

public Revenue(ReportType reportType, Double profit) {
public Revenue(ReportType reportType, BigDecimal profit) {
this.reportType = reportType;
this.profit = profit;
}
Expand All @@ -24,7 +26,7 @@ public ReportType getReportType() {
return reportType;
}

public Double getProfit() {
public BigDecimal getProfit() {
return profit;
}
//endregion
Expand Down
12 changes: 7 additions & 5 deletions src/main/java/ru/leroymerlin/data/Service.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package ru.leroymerlin.data;

import java.math.BigDecimal;

public class Service {
private final String itemName;
private final Double sum;
private final Double commission;
private final BigDecimal sum;
private final BigDecimal commission;

public Service(String itemName, Double sum, Double commission) {
public Service(String itemName, BigDecimal sum, BigDecimal commission) {
this.itemName = itemName;
this.sum = sum;
this.commission = commission;
Expand All @@ -25,11 +27,11 @@ public String getItemName() {
return itemName;
}

public Double getSum() {
public BigDecimal getSum() {
return sum;
}

public Double getCommission() {
public BigDecimal getCommission() {
return commission;
}
//endregion
Expand Down
6 changes: 5 additions & 1 deletion src/main/java/ru/leroymerlin/reader/ItemReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import ru.leroymerlin.data.Item;

import java.io.IOException;
import java.math.BigDecimal;
import java.net.URISyntaxException;
import java.util.List;
import java.util.stream.Collectors;
Expand All @@ -14,7 +15,10 @@ public static List<Item> getItems() throws URISyntaxException, IOException {

return content.stream().skip(1).limit(content.size())
.map(it -> it.split(","))
.map(it -> new Item(it[0], Double.valueOf(it[1]), Integer.valueOf(it[2]), Double.valueOf(it[3])))
.map(it -> new Item(it[0]
, BigDecimal.valueOf(Double.parseDouble(it[1]))
, Integer.valueOf(it[2])
, BigDecimal.valueOf(Double.parseDouble(it[3]))))
.collect(Collectors.toList());
}
}
5 changes: 3 additions & 2 deletions src/main/java/ru/leroymerlin/reader/RevenueReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,19 @@
import ru.leroymerlin.protocol.ReportType;

import java.io.IOException;
import java.math.BigDecimal;
import java.net.URISyntaxException;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class RevenueReader {
public static Map<ReportType, Double> getRevenue() throws URISyntaxException, IOException {
public static Map<ReportType, BigDecimal> getRevenue() throws URISyntaxException, IOException {
List<String> content = FileResourceUtil.getContentFromFile("billing/revenue.csv");

return content.stream().skip(1)
.map(it -> it.split(","))
.map(it -> new Revenue(ReportType.valueOf(it[0]), Double.valueOf(it[1])))
.map(it -> new Revenue(ReportType.valueOf(it[0]), BigDecimal.valueOf(Double.parseDouble(it[1]))))
.collect(Collectors.toMap(Revenue::getReportType, Revenue::getProfit));
}
}
9 changes: 6 additions & 3 deletions src/main/java/ru/leroymerlin/reader/ServiceReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,20 @@
import ru.leroymerlin.data.Service;

import java.io.IOException;
import java.math.BigDecimal;
import java.net.URISyntaxException;
import java.util.List;
import java.util.stream.Collectors;

public class ServiceReader {
public static List<Service> getServices() throws URISyntaxException, IOException {
List<String> content = FileResourceUtil.getContentFromFile("billing/reconciliation.csv");
List<String> content = FileResourceUtil.getContentFromFile("reports/services.csv");

return content.stream().skip(1)
.map(it -> it.split(","))
.map(it -> new Service(it[0], Double.valueOf(it[1]), Double.valueOf(it[2])))
.map(it -> new Service(it[0]
, BigDecimal.valueOf(Double.parseDouble(it[1]))
, BigDecimal.valueOf(Double.parseDouble(it[2]))))
.collect(Collectors.toList());
}
}
}