EN · DE · RU · FR · ES

#262: SkillMatrixPrivacyProtectionJob.kt

plugins/org.projectforge.plugins.skillmatrix/src/main/kotlin/org/projectforge/plugins/skillmatrix/SkillMatrixPrivacyProtectionJob.kt Тип: Kotlin · Роль: Регистрация плагина · Источник: plugins/org.projectforge.plugins.skillmatrix/src/main/kotlin/org/projectforge/plugins/skillmatrix/SkillMatrixPrivacyProtectionJob.kt 79 строк · 44 кода · 26 комментариев · 9 пустых
Плановое/системное задание для SkillMatrixPrivacyProtection. Реализует периодическое обслуживание или логику проверки целостности, выполняемую планировщиком заданий PF.

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

Аннотации: PostConstruct, micromata, Service, author, Autowired

Классы: SkillMatrixPrivacyProtectionJob

Супертип(ы): IPrivacyProtectionJob

Функции (2): postConstruct, execute

Свойства (6): persistenceService, purgeCronPrivacyProtectionJob, userDao, date, lastUpdate, counter

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

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

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

package org.projectforge.plugins.skillmatrix

import jakarta.annotation.PostConstruct
import mu.KotlinLogging
import org.projectforge.business.privacyprotection.CronPrivacyProtectionJob
import org.projectforge.business.privacyprotection.IPrivacyProtectionJob
import org.projectforge.business.user.UserDao
import org.projectforge.framework.persistence.jpa.PfPersistenceService
import org.projectforge.framework.time.PFDateTime
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service

private val log = KotlinLogging.logger {}

/**
 *
 * @author Kai Reinhard (k.reinhard@micromata.de)
 */
@Service
class SkillMatrixPrivacyProtectionJob : IPrivacyProtectionJob {
    @Autowired
    private lateinit var persistenceService: PfPersistenceService

    @Autowired
    private lateinit var purgeCronPrivacyProtectionJob: CronPrivacyProtectionJob

    @Autowired
    private lateinit var userDao: UserDao

    @PostConstruct
    private fun postConstruct() {
        purgeCronPrivacyProtectionJob.register(this)
    }

    override fun execute() {
        val date = PFDateTime.now().minusMonths(3L)
        log.info("Очистка записей матрицы навыков уволенных (удалённых/деактивированных пользователей с lastUpdate < ${date.isoString}Z)...")

        userDao.selectAll(checkAccess = false).forEach { user ->
            if (user.deactivated || user.deleted) {
                val lastUpdate = user.lastUpdate
                if (lastUpdate != null && lastUpdate < date.utilDate) {
                    val counter = persistenceService.runInTransaction { context ->
                        context.executeNamedUpdate(
                            SkillEntryDO.DELETE_ALL_OF_USER, Pair("userId", user.id)
                        )
                    }
                    if (counter > 0) {
                        log.info { "Удалено $counter записей матрицы навыков пользователя '${user.username}' с id ${user.id}." }
                    }
                }
            }
        }
        log.info("Очистка записей матрицы навыков завершена.")
    }
}

История Git

868d6abb7 2025 -> 2026
63081666f Заголовки исходных файлов: 2024-> 2025.
1b50060c3 BaseDao: переименовано: get -> find, save -> insert, getList -> select, load -> select
2a8ea2076 Миграция в процессе... BaseDao рефакторизован (ещё не завершено) внутренние* методы переименованы.
108ecf629 !!!!! Большое изменение обработки транзакций: повторное использование PfPersistenceContext насколько это возможно (ещё не завершено). Тесты пока не запускаются. Транзакции только для чтения в PfPersistenceService удалены, операции записи PfPersistenceService удалены.