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
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,19 @@
import space.shefer.receipt.rest.dto.ReceiptStatus;

import javax.annotation.Nullable;
import javax.persistence.*;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -61,6 +73,15 @@ public class Receipt {
@JoinColumn(name = "receipt_id")
private List<Item> items = new ArrayList<>();

/**
* The raw data of the receipt.
*
* Contains JSON if receipt is from FNS
*
*/
@Nullable
@Column(name = "raw_data")
private String rawData;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В базе просто как string? Не JSONB?


public static ReceiptMetaDto toDto(Receipt receipt) {
ReceiptMetaDto result = new ReceiptMetaDto();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package space.shefer.receipt.rest.service;

import org.springframework.beans.factory.annotation.Autowired;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.stereotype.Service;
import space.shefer.receipt.fnssdk.dto.FnsItemDto;
import space.shefer.receipt.fnssdk.dto.FnsReceiptDto;
Expand All @@ -17,17 +19,15 @@
import java.util.List;

@Service
@RequiredArgsConstructor
public class FnsReceiptService {

@Autowired
public FnsReceiptService(ReceiptRepository receiptRepository, ItemRepository itemRepository) {
this.receiptRepository = receiptRepository;
this.itemRepository = itemRepository;
}
private static ObjectMapper objectMapper = new ObjectMapper();

private final ReceiptRepository receiptRepository;
private final ItemRepository itemRepository;

@SneakyThrows
public Receipt create(FnsReceiptDto receiptDto) {
Receipt receipt = new Receipt();
receipt.setFn(receiptDto.getFiscalDriveNumber());
Expand All @@ -36,20 +36,10 @@ public Receipt create(FnsReceiptDto receiptDto) {
receipt.setSum(receiptDto.getTotalSum() / 100d);
receipt.setDate(LocalDateTime.ofEpochSecond(receiptDto.getDateTime(), 0, ZoneOffset.UTC));
receipt.setStatus(ReceiptStatus.LOADED);
receipt.setRawData(objectMapper.writeValueAsString(receiptDto));
receipt.setProvider("TGBOT_NALOG");

List<Receipt> matchingReceipts = receiptRepository.getReceipts(
ReportMetaFilter.builder()
.fn(receipt.getFn())
.fd(receipt.getFd())
.fp(receipt.getFp())
.dateFrom(receipt.getDate())
.dateTo(receipt.getDate())
.sumMax(receipt.getSum())
.sumMin(receipt.getSum())
.statuses(EnumSet.of(receipt.getStatus()))
.build()
);
List<Receipt> matchingReceipts = findMatching(receipt);

if (!matchingReceipts.isEmpty()) {
return matchingReceipts.get(0);
Expand All @@ -70,4 +60,19 @@ public Receipt create(FnsReceiptDto receiptDto) {
return savedReceipt;
}

private List<Receipt> findMatching(Receipt receipt) {
return receiptRepository.getReceipts(
ReportMetaFilter.builder()
.fn(receipt.getFn())
.fd(receipt.getFd())
.fp(receipt.getFp())
.dateFrom(receipt.getDate())
.dateTo(receipt.getDate())
.sumMax(receipt.getSum())
.sumMin(receipt.getSum())
.statuses(EnumSet.of(receipt.getStatus()))
.build()
);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,10 @@ public class ReceiptRepositorySlowTest {
public void getReceipts_noFilter() {
LocalDateTime date = DateUtil.parseReceiptDate("20190813T1355");
List<Receipt> receiptsInitial = Arrays.asList(
new Receipt(null, date, "83479", "96253", "76193", 123.45, "TAXCOM", LOADED, null, emptyList()),
new Receipt(null, date, "34780", "89255", "82661", 121.44, "TAXCOM", LOADED, null, emptyList()),
new Receipt(null, date, "03845", "11111", "11547", 723.75, "TAXCOM", LOADED, null, emptyList()),
new Receipt(null, date, "82640", "34579", "99999", 103.55, "TAXCOM", LOADED, null, emptyList())
new Receipt(null, date, "83479", "96253", "76193", 123.45, "TAXCOM", LOADED, null, emptyList(), ""),
new Receipt(null, date, "34780", "89255", "82661", 121.44, "TAXCOM", LOADED, null, emptyList(), ""),
new Receipt(null, date, "03845", "11111", "11547", 723.75, "TAXCOM", LOADED, null, emptyList(), ""),
new Receipt(null, date, "82640", "34579", "99999", 103.55, "TAXCOM", LOADED, null, emptyList(), "")
);
repository.saveAll(receiptsInitial);
List<Receipt> receiptsAll = repository.findAll();
Expand Down Expand Up @@ -70,64 +70,64 @@ public void getReceipt_fullFilter() {
{// WRONG ID
Receipt receipt =
repository.save(new Receipt(null,
dateOk, "11111", "22222", "33333", sumOk, "TAXCOM", LOADED, null, emptyList()));
dateOk, "11111", "22222", "33333", sumOk, "TAXCOM", LOADED, null, emptyList(), ""));
bannedId = receipt.getId();
}
{// OK
Receipt receipt =
repository.save(new Receipt(null,
dateOk, "11111", "22222", "33333", sumOk, "TAXCOM", LOADED, null, emptyList()));
dateOk, "11111", "22222", "33333", sumOk, "TAXCOM", LOADED, null, emptyList(), ""));
expectedReceipts.add(receipt);
}
{// OK
Receipt receipt =
repository.save(new Receipt(null,
dateOk, "11111", "22222", "33333", sumOk, "TAXCOM", LOADED, null, emptyList()));
dateOk, "11111", "22222", "33333", sumOk, "TAXCOM", LOADED, null, emptyList(), ""));
expectedReceipts.add(receipt);
}
{// WRONG DATE: WRONG YEAR
repository.save(new Receipt(null,
dateWrongYear, "11111", "22222", "33333", sumOk, "TAXCOM", LOADED, null, emptyList()));
dateWrongYear, "11111", "22222", "33333", sumOk, "TAXCOM", LOADED, null, emptyList(), ""));
}
{// WRONG DATE: WRONG MONTH
repository.save(new Receipt(null,
dateWrongMonth, "11111", "22222", "33333", sumOk, "TAXCOM", LOADED, null, emptyList()));
dateWrongMonth, "11111", "22222", "33333", sumOk, "TAXCOM", LOADED, null, emptyList(), ""));
}
{// WRONG DATE: WRONG DATE
repository.save(new Receipt(null,
dateWrongDate, "11111", "22222", "33333", sumOk, "TAXCOM", LOADED, null, emptyList()));
dateWrongDate, "11111", "22222", "33333", sumOk, "TAXCOM", LOADED, null, emptyList(), ""));
}
{// WRONG DATE: WRONG HOUR
repository.save(new Receipt(null,
dateWrongHour, "11111", "22222", "33333", sumOk, "TAXCOM", LOADED, null, emptyList()));
dateWrongHour, "11111", "22222", "33333", sumOk, "TAXCOM", LOADED, null, emptyList(), ""));
}
{// WRONG DATE: WRONG MINUTE
repository.save(new Receipt(null,
dateWrongMinute, "11111", "22222", "33333", sumOk, "TAXCOM", LOADED, null, emptyList()));
dateWrongMinute, "11111", "22222", "33333", sumOk, "TAXCOM", LOADED, null, emptyList(), ""));
}
{// WRONG DATE: WRONG SECOND
repository.save(new Receipt(null,
dateWrongSecond, "11111", "22222", "33333", sumOk, "TAXCOM", LOADED, null, emptyList()));
dateWrongSecond, "11111", "22222", "33333", sumOk, "TAXCOM", LOADED, null, emptyList(), ""));
}
{// WRONG FN
repository.save(new Receipt(null,
dateOk, "83759", "22222", "33333", sumOk, "TAXCOM", LOADED, null, emptyList()));
dateOk, "83759", "22222", "33333", sumOk, "TAXCOM", LOADED, null, emptyList(), ""));
}
{// WRONG FD
repository.save(new Receipt(null,
dateOk, "11111", "02349", "33333", sumOk, "TAXCOM", LOADED, null, emptyList()));
dateOk, "11111", "02349", "33333", sumOk, "TAXCOM", LOADED, null, emptyList(), ""));
}
{// WRONG FP
repository.save(new Receipt(null,
dateOk, "11111", "22222", "73458", sumOk, "TAXCOM", LOADED, null, emptyList()));
dateOk, "11111", "22222", "73458", sumOk, "TAXCOM", LOADED, null, emptyList(), ""));
}
{// WRONG SUM
repository.save(new Receipt(null,
dateOk, "11111", "22222", "33333", 65.3, "TAXCOM", LOADED, null, emptyList()));
dateOk, "11111", "22222", "33333", 65.3, "TAXCOM", LOADED, null, emptyList(), ""));
}
{// WRONG STATUS
repository.save(new Receipt(null,
dateOk, "11111", "22222", "33333", sumOk, "TAXCOM", IDLE, null, emptyList()));
dateOk, "11111", "22222", "33333", sumOk, "TAXCOM", IDLE, null, emptyList(), ""));
}

repository.flush();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@

import static java.util.Collections.singletonList;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.doAnswer;
Expand Down Expand Up @@ -60,6 +62,8 @@ public void create() {
assertEquals(dateTime, receipt.getDate());
assertEquals(receipt.getStatus(), ReceiptStatus.LOADED);
assertEquals("TGBOT_NALOG", receipt.getProvider());
assertNotNull(receipt.getRawData());
assertFalse(receipt.getRawData().isEmpty());

ArgumentCaptor<Item> itemCaptor = ArgumentCaptor.forClass(Item.class);
verify(itemRepository, times(2)).save(itemCaptor.capture());
Expand Down