EN · DE · RU · FR · ES

#157: LiquidityEntryDao.java

plugins/org.projectforge.plugins.liquidityplanning/src/main/java/org/projectforge/plugins/liquidityplanning/LiquidityEntryDao.java Тип: Java · Роль: Объект доступа к данным · Источник: plugins/org.projectforge.plugins.liquidityplanning/src/main/java/org/projectforge/plugins/liquidityplanning/LiquidityEntryDao.java 111 строк · 76 кода · 28 комментариев · 7 пустых
Объект доступа к данным для сущностей LiquidityEntry. Расширяет BaseDao, предоставляя CRUD-операции, запросы Hibernate Search и доступ к данным на уровне бизнес-логики.

Структура кода

Пакет: org.projectforge.plugins.liquidityplanning

Классы: LiquidityEntryDao

Расширяет: BaseDao

Методы (3): buildStatistics, select, newInstance

Импорты: 10 пакетов

Исходный код (сокращён)

package org.projectforge.plugins.liquidityplanning;

import org.projectforge.business.fibu.AmountType;
import org.projectforge.business.fibu.PaymentStatus;
import org.projectforge.framework.persistence.api.BaseDao;
import org.projectforge.framework.persistence.api.BaseSearchFilter;
import org.projectforge.framework.persistence.api.QueryFilter;
import org.projectforge.framework.time.PFDay;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

/**
 * @author Kai Reinhard (k.reinhard@micromata.de)
 */
@Service
public class LiquidityEntryDao extends BaseDao<LiquidityEntryDO> {
  public LiquidityEntryDao() {
    super(LiquidityEntryDO.class);
    userRightId = LiquidityplanningPluginUserRightId.PLUGIN_LIQUIDITY_PLANNING;
  }

  public LiquidityEntriesStatistics buildStatistics(final List<LiquidityEntryDO> list) {
    final LiquidityEntriesStatistics stats = new LiquidityEntriesStatistics();
    if (list == null) {
      return stats;
    }
    for (final LiquidityEntryDO entry : list) {
      stats.add(entry);
    }
    return stats;
  }

  @Override
  public List<LiquidityEntryDO> select(final BaseSearchFilter filter) {
    final LiquidityFilter myFilter;
    if (filter instanceof LiquidityFilter) {
      myFilter = (LiquidityFilter) filter;
    } else {
      myFilter = new LiquidityFilter(filter);
    }
    final QueryFilter queryFilter = new QueryFilter(myFilter);
    final List<LiquidityEntryDO> list = select(queryFilter);
    if (myFilter.getPaymentStatus() == PaymentStatus.ALL
            && myFilter.getAmountType() == AmountType.ALL
            && myFilter.getNextDays() <= 0
            || myFilter.getDeleted()) {
      return list;
    }
    final List<LiquidityEntryDO> result = new ArrayList<>();
    final PFDay baseDate = PFDay.fromOrNow(myFilter.getBaseDate());
    for (final LiquidityEntryDO entry : list) {
      if (myFilter.getPaymentStatus() == PaymentStatus.PAID && !entry.getPaid()) {
        continue;
      }
      if (myFilter.getPaymentStatus() == PaymentStatus.UNPAID && entry.getPaid()) {
        continue;
      }
      if (myFilter.getNextDays() > 0) {
        LocalDate dateOfPayment = entry.getDateOfPayment();
        if (dateOfPayment == null) {
          dateOfPayment = baseDate.getLocalDate();
        }
        if (dateOfPayment.isBefore(baseDate.getLocalDate())) {
          // Запись до сегодняшнего дня:
          if (myFilter.getPaymentStatus() == PaymentStatus.PAID || entry.getPaid()) {
            // Игнорируем записи из прошлого, если они оплачены. Также игнорируем неоплаченные записи из прошлого, если пользователь хочет отфильтровать только оплаченные.
            continue;
          }
        } else {
          if (baseDate.daysBetween(entry.getDateOfPayment()) > myFilter.getNextDays()) {
            continue;
          }
        }
      }
      result.add(entry);
    }
    return result;
  }

  @Override
  public LiquidityEntryDO newInstance() {
    return new LiquidityEntryDO();
  }
}

История Git

868d6abb7 2025 → 2026
63081666f Заголовки исходных файлов: 2024 → 2025.
b71b5073d Миграция в процессе... (все тесты всех пакетов: OK).
1b50060c3 BaseDao: переименовано: get → find, save → insert, getList → select, load → select
5bafe7941 @Repository → @Service. @Transactional-аннотации удалены.