From 807e92e1c7b9cf2b746d11bf4a8b2db2422b1b98 Mon Sep 17 00:00:00 2001 From: Vladimir Shefer Date: Sun, 3 May 2020 17:25:51 +0300 Subject: [PATCH 1/2] RCJ-32 Save raw json to database --- .../shefer/receipt/rest/entity/Receipt.java | 23 +++++++++++- .../rest/service/FnsReceiptService.java | 13 +++---- .../repository/ReceiptRepositorySlowTest.java | 36 +++++++++---------- .../rest/service/FnsReceiptServiceTest.java | 4 +++ 4 files changed, 51 insertions(+), 25 deletions(-) diff --git a/rest-api/src/main/java/space/shefer/receipt/rest/entity/Receipt.java b/rest-api/src/main/java/space/shefer/receipt/rest/entity/Receipt.java index 5cfc761..53c1552 100644 --- a/rest-api/src/main/java/space/shefer/receipt/rest/entity/Receipt.java +++ b/rest-api/src/main/java/space/shefer/receipt/rest/entity/Receipt.java @@ -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; @@ -61,6 +73,15 @@ public class Receipt { @JoinColumn(name = "receipt_id") private List items = new ArrayList<>(); + /** + * The raw data of the receipt. + * + * Contains JSON if receipt is from FNS + * + */ + @Nullable + @Column(name = "raw_data") + private String rawData; public static ReceiptMetaDto toDto(Receipt receipt) { ReceiptMetaDto result = new ReceiptMetaDto(); diff --git a/rest-api/src/main/java/space/shefer/receipt/rest/service/FnsReceiptService.java b/rest-api/src/main/java/space/shefer/receipt/rest/service/FnsReceiptService.java index 938baef..3df19ba 100644 --- a/rest-api/src/main/java/space/shefer/receipt/rest/service/FnsReceiptService.java +++ b/rest-api/src/main/java/space/shefer/receipt/rest/service/FnsReceiptService.java @@ -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; @@ -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()); @@ -36,6 +36,7 @@ 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 matchingReceipts = receiptRepository.getReceipts( diff --git a/rest-api/src/test/java/space/shefer/receipt/rest/repository/ReceiptRepositorySlowTest.java b/rest-api/src/test/java/space/shefer/receipt/rest/repository/ReceiptRepositorySlowTest.java index 8eca839..34e2f42 100644 --- a/rest-api/src/test/java/space/shefer/receipt/rest/repository/ReceiptRepositorySlowTest.java +++ b/rest-api/src/test/java/space/shefer/receipt/rest/repository/ReceiptRepositorySlowTest.java @@ -35,10 +35,10 @@ public class ReceiptRepositorySlowTest { public void getReceipts_noFilter() { LocalDateTime date = DateUtil.parseReceiptDate("20190813T1355"); List 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 receiptsAll = repository.findAll(); @@ -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(); diff --git a/rest-api/src/test/java/space/shefer/receipt/rest/service/FnsReceiptServiceTest.java b/rest-api/src/test/java/space/shefer/receipt/rest/service/FnsReceiptServiceTest.java index d8bb74f..0cae05c 100644 --- a/rest-api/src/test/java/space/shefer/receipt/rest/service/FnsReceiptServiceTest.java +++ b/rest-api/src/test/java/space/shefer/receipt/rest/service/FnsReceiptServiceTest.java @@ -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; @@ -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 itemCaptor = ArgumentCaptor.forClass(Item.class); verify(itemRepository, times(2)).save(itemCaptor.capture()); From 3d2f4a9fbcbff80fc73f94a8be64869ff1299108 Mon Sep 17 00:00:00 2001 From: Vladimir Shefer Date: Sun, 3 May 2020 17:26:30 +0300 Subject: [PATCH 2/2] RCJ-32 FnsReceiptService: Extract private method 'findMatching' --- .../rest/service/FnsReceiptService.java | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/rest-api/src/main/java/space/shefer/receipt/rest/service/FnsReceiptService.java b/rest-api/src/main/java/space/shefer/receipt/rest/service/FnsReceiptService.java index 3df19ba..28573c1 100644 --- a/rest-api/src/main/java/space/shefer/receipt/rest/service/FnsReceiptService.java +++ b/rest-api/src/main/java/space/shefer/receipt/rest/service/FnsReceiptService.java @@ -39,18 +39,7 @@ public Receipt create(FnsReceiptDto receiptDto) { receipt.setRawData(objectMapper.writeValueAsString(receiptDto)); receipt.setProvider("TGBOT_NALOG"); - List 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 matchingReceipts = findMatching(receipt); if (!matchingReceipts.isEmpty()) { return matchingReceipts.get(0); @@ -71,4 +60,19 @@ public Receipt create(FnsReceiptDto receiptDto) { return savedReceipt; } + private List 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() + ); + } + }