按点符号过滤,只返回特定结果

问题描述 投票:0回答:0

客户班

@RealmClass
public class Customer extends RealmObject {
    @PrimaryKey private int id;
    private int customerSerial;
    @Required private String customerName;
    private RealmList<Invoice> invoices = new RealmList<>();

    public Customer() {}

    public Customer(int id, int customerSerial, String customerName) {
        this.id = id;
        this.customerSerial = customerSerial;
        this.customerName = customerName;
    }

    public int getId() { return id; }
    public void setId(int id) { this.id = id; }

    public int getCustomerSerial() { return customerSerial; }
    public void setCustomerSerial(int customerSerial) { this.customerSerial = customerSerial; }

    public String getCustomerName() { return customerName; }
    public void setCustomerName(String customerName) { this.customerName = customerName; }

    public List<Invoice> getInvoices() { return invoices; }
    public void setInvoices(RealmList<Invoice> invoices) { this.invoices = invoices; }
}

发票类

@RealmClass
public class Invoice extends RealmObject {
    @PrimaryKey private int invoiceNumber;
    private Date invoiceDate;
    private String invoiceTime;
    private int debtorSerNo;
    private int deliveryStatus;
    private long invoiceSort;
    private int driverId;
    private String debtorName;
    private boolean codCustomer;
    private boolean outstandingCOD;
    private double outstandingCODAmount;
    private String deliveryNotes;
    private int lineCount;

    public Invoice() {}

    public Invoice(TtInvoice invoice) {
        this.invoiceNumber = invoice.getInvoiceNumber();
        this.invoiceDate = invoice.getInvoiceDate();
        this.invoiceTime = invoice.getInvoiceTime();
        this.debtorSerNo = invoice.getDebtorSerNo();
        this.deliveryStatus = 0;
        this.debtorName = invoice.getDebtorName();
        this.codCustomer = invoice.isCodCustomer();
        this.outstandingCOD = invoice.isOutstandingCOD();
        this.outstandingCODAmount = invoice.getOutstandingCODAmount();
        this.deliveryNotes = invoice.getDeliveryNotes();
        this.lineCount = invoice.getLineCount();
    }

    public int getInvoiceNumber() {
        return invoiceNumber;
    }

    public void setInvoiceNumber(int invoiceNumber) {
        this.invoiceNumber = invoiceNumber;
    }

    public Date getInvoiceDate() {
        return invoiceDate;
    }

    public LocalDateTime getInvoiceDateTime() {
        LocalTime time = LocalTime.parse(invoiceTime);
        LocalDate date = invoiceDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        return date.atTime(time);
    }

    public void setInvoiceDate(Date invoiceDate) {
        this.invoiceDate = invoiceDate;
    }

    public String getInvoiceTime() {
        return invoiceTime;
    }

    public void setInvoiceTime(String invoiceTime) {
        this.invoiceTime = invoiceTime;
    }

    public int getDebtorSerNo() {
        return debtorSerNo;
    }

    public void setDebtorSerNo(int debtorSerNo) {
        this.debtorSerNo = debtorSerNo;
    }

    public String getDebtorName() {
        return debtorName;
    }

    public void setDebtorName(String debtorName) {
        this.debtorName = debtorName;
    }

    public boolean isCodCustomer() {
        return codCustomer;
    }

    public void setCodCustomer(boolean codCustomer) {
        this.codCustomer = codCustomer;
    }

    public boolean isOutstandingCOD() {
        return outstandingCOD;
    }

    public void setOutstandingCOD(boolean outstandingCOD) {
        this.outstandingCOD = outstandingCOD;
    }

    public double getOutstandingCODAmount() {
        return outstandingCODAmount;
    }

    public void setOutstandingCODAmount(double outstandingCODAmount) {
        this.outstandingCODAmount = outstandingCODAmount;
    }

    public String getDeliveryNotes() {
        return deliveryNotes;
    }

    public void setDeliveryNotes(String deliveryNotes) {
        this.deliveryNotes = deliveryNotes;
    }

    public int getLineCount() {
        return lineCount;
    }

    public void setLineCount(int lineCount) {
        this.lineCount = lineCount;
    }

    public int getDeliveryStatus() {
        return deliveryStatus;
    }

    public void setDeliveryStatus(int deliveryStatus) {
        this.deliveryStatus = deliveryStatus;
    }

    public long getInvoiceSort() {
        return invoiceSort;
    }

    public void setInvoiceSort(long invoiceSort) {
        this.invoiceSort = invoiceSort;
    }

    public int getDriverId() {
        return driverId;
    }

    public void setDriverId(int driverId) {
        this.driverId = driverId;
    }
}

Tt发票类

TtInvoice 是在扫描发票上的条形码时从远程 JSON 对象创建的,添加了一个仅用于测试目的的构造函数。

public class TtInvoice implements Serializable {
    @JsonProperty("Invoice_Number")
    private int invoiceNumber;

    @JsonProperty("Invoice_Date")
    private Date invoiceDate;

    @JsonProperty("Invoice_Time")
    private String invoiceTime;

    @JsonProperty("Debtor_Ser_No")
    private int debtorSerNo;

    @JsonProperty("Debtor_Name")
    private String debtorName;

    @JsonProperty("COD_Customer")
    private boolean codCustomer;

    @JsonProperty("Outstanding_COD")
    private boolean outstandingCOD;

    @JsonProperty("Outstanding_COD_Amount")
    private double outstandingCODAmount;

    @JsonProperty("Delivery_Notes")
    private String deliveryNotes;

    @JsonProperty("Line_Count")
    private int lineCount;

    public TtInvoice(int invoiceNumber, Date invoiceDate, String invoiceTime, int debtorSerNo, int deliveryStatus) {
      this.invoiceNumber  = invoiceNumber;
      this.invoiceDate    = invoiceDate;
      this.invoiceTime    = invoiceTime;
      this.debtorSerNo    = debtorSerNo;
      this.deliveryStatus = deliveryStatus;
    }

    public int getInvoiceNumber() {
        return invoiceNumber;
    }

    public void setInvoiceNumber(int invoiceNumber) {
        this.invoiceNumber = invoiceNumber;
    }

    public Date getInvoiceDate() {
        return invoiceDate;
    }

    public void setInvoiceDate(Date invoiceDate) {
        this.invoiceDate = invoiceDate;
    }

    public String getInvoiceTime() {
        return invoiceTime;
    }

    public void setInvoiceTime(String invoiceTime) {
        this.invoiceTime = invoiceTime;
    }

    public LocalDateTime getInvoiceDateTime() {
        LocalTime time = LocalTime.parse(invoiceTime);
        LocalDate date = invoiceDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        return date.atTime(time);
    }

    public int getDebtorSerNo() {
        return debtorSerNo;
    }

    public void setDebtorSerNo(int debtorSerNo) {
        this.debtorSerNo = debtorSerNo;
    }

    public String getDebtorName() {
        return debtorName;
    }

    public void setDebtorName(String debtorName) {
        this.debtorName = debtorName;
    }

    public String getDeliveryNotes() {
        return deliveryNotes;
    }

    public void setDeliveryNotes(String deliveryNotes) {
        this.deliveryNotes = deliveryNotes;
    }

    public boolean isCodCustomer() {
        return codCustomer;
    }

    public void setCodCustomer(boolean codCustomer) {
        this.codCustomer = codCustomer;
    }

    public boolean isOutstandingCOD() {
        return outstandingCOD;
    }

    public void setOutstandingCOD(boolean outstandingCOD) {
        this.outstandingCOD = outstandingCOD;
    }

    public double getOutstandingCODAmount() {
        return outstandingCODAmount;
    }

    public void setOutstandingCODAmount(double outstandingCODAmount) {
        this.outstandingCODAmount = outstandingCODAmount;
    }

    public int getLineCount() {
        return lineCount;
    }

    public void setLineCount(int lineCount) {
        this.lineCount = lineCount;
    }
}

在我的片段中,如果我这样做

private RealmChangeListener<RealmResults<Customer>> customerRealmChangeListener;
RealmResults<Customer> customerRealmResults;

Realm realm = Realm.getDefaultInstance();

customerRealmChangeListener = customers -> {
    customers.forEach(customer -> {
      Log.w("CUSTOMERS", customer.getCustomerName());
    });
};

customerRealmResults = realm.where(Customer.class).equalTo("invoices.deliveryStatus", 0).findAllAsync();
customerRealmResults.addChangeListener(customerRealmChangeListener);

realm.executeTransactionAsync(transactionRealm -> {
  Customer newCustomer = new Customer(1, 1, "Test Customer 1");
  Invoice newInvoice1 = new Invoice(new TtInvoice(1234, 20/02/2023, "10:07:00", 1, 0));
  Invoice newInvoice2 = new Invoice(new TtInvoice(2468, 20/02/2023, "10:08:00", 1, 1));

  newCustomer.getInvoices().add(newInvoice1);
  newCustomer.getInvoices().add(newInvoice2);

  transactionRealm.insert(newCustomer);
});

添加没有问题,我遇到的问题是“findAllAsync”,它返回两张发票,而不仅仅是 1.

我按预期让客户回来了,但是调用“customer.getInvoices()”会返回 2 张发票,而不仅仅是 1 张。

我觉得我想做的事情非常简单,我只是没有看到问题,已经尝试了几天,现在无济于事。

如果我在 findAllAsync() 调用上设置断点并使用相同的查询运行我自己的“findAll()”,它会出现同样的问题。

也许这就是我添加新发票的方式,但不是 100% 确定。

否则我喜欢 Realm 比 Room 好多了。

android realm realm-java
© www.soinside.com 2019 - 2024. All rights reserved.