sumowanie w powiązanej encji

0

Hej,
mam dwie encje reprezentujące dokument i jego pozycje

@Table(name = "documents")
@Entity
@Data
public class ErpDocument {
    @Id
    Integer id;
    String documentFullNo;
    int customerId;
    String customerName;
    LocalDate date;
    BigDecimal payment;
    BigDecimal paymentLeft;
    boolean paymentSettled;
    LocalDate documentSettledDate;
    @Enumerated(STRING)
    Status paymentStatus;
    BigDecimal paid;
    @OneToMany(fetch = EAGER)
    @Fetch(SUBSELECT)
    @JoinColumn(name = "document_id")
    Set<ErpDocumentPosition> positions = new HashSet<>();

    @Transient
    public BigDecimal getPoints() {
        return positions.stream()
                .map(ErpDocumentPosition::getPoints)
                .reduce(BigDecimal.ZERO, BigDecimal::add);
    }

    public enum Status {
        W_TERMINIE,
        PO_TERMINIE;
    }
}

oraz pozycje

@Table(name="positions")
@Entity
@Data
public class ErpDocumentPosition {
    @Id
    String id;
    @Column(name = "document_id")
    int documentId;
    String skuCode;
    String skuName;
    String skuGroup;
    BigDecimal converter;
    BigDecimal quantity;
    String um;
    BigDecimal netAmount;
    BigDecimal points;
}

chciałbym zapakować do np.

@Data
public class RuleDto {
    private BigDecimal onTime;
    private BigDecimal due;
    private BigDecimal negative;
    private BigDecimal potential;
}

potrzebuję metody/serwisu, która przyjmie id klienta i zwróci powyższe przykładowe dto:
onTime - suma "points" gdzie status jest W_TERMINIE i paymentSettled = true
due - suma "points" gdzie status jest PO_TERMINIE i paymentSettled = true
negative - suma wszystkich ujemnych points i paymentSettled = true
potential - suma points gdzie paymentSettled = false

mając coś takiego chce to zawołać z frontu (Vue) i wyświetlić te 4 wartości.

czy ktoś z Was mógłby pomóc aby to ładnie zapisać. Używam najnowszej Javy.
Po głowie na ten moment kołacze mi się napisanie tego w sql i użycie native query w repozytorium i odpalenie w serwisie.
Zapewne dobrodziejstwa "Javki" pomogą to osiągnąć inaczej być może lepiej/ładniej....

2

Po głowie na ten moment kołacze mi się napisanie tego w sql i użycie native query w repozytorium i odpalenie w serwisie.
Zapewne dobrodziejstwa "Javki" pomogą to osiągnąć inaczej być może lepiej/ładniej....

I dobrze. Jeszcze trochę a dojdziesz do tego żeby w ogóle zrezygnować z JPA ;)

1

A czy stosowanie ORM oznacza że musisz zawsze robić cuda na kiju zamiast skorzystać z SQL?
Nie możesz wykorzystać jak człowiek np. JdbcTemplate?

1 użytkowników online, w tym zalogowanych: 0, gości: 1