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