From a72000f7eb1308faaf47c5185a398555caf6e38f Mon Sep 17 00:00:00 2001 From: truettwo Date: Thu, 20 Feb 2025 12:54:43 +0300 Subject: [PATCH] added new sql open doesnot work --- .../java/com/example/nto/entity/Employee.java | 22 ++++++++++- .../example/nto/service/EmployeeService.java | 5 +++ .../nto/service/impl/EmployeeServiceImpl.java | 31 +++++++++++++-- src/main/resources/data.sql | 38 +++++++++++++++---- 4 files changed, 83 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/example/nto/entity/Employee.java b/src/main/java/com/example/nto/entity/Employee.java index 3398467..9594cc9 100644 --- a/src/main/java/com/example/nto/entity/Employee.java +++ b/src/main/java/com/example/nto/entity/Employee.java @@ -39,4 +39,24 @@ public class Employee { public boolean isBlocked() { return "blocked".equals(status); } -} \ No newline at end of file + // Время последнего визита + + @Column(name = "last_entry_code") + private Long lastEntryCode; // Последний использованный код + + @Column(name = "entry_method") + private String entryMethod; // Метод входа (QR, карта и т.д.) + + + public LocalDateTime getLastVisit() { return lastVisit; } + public void setLastVisit(LocalDateTime lastVisit) { this.lastVisit = lastVisit; } + + public Long getLastEntryCode() { return lastEntryCode; } + public void setLastEntryCode(Long lastEntryCode) { this.lastEntryCode = lastEntryCode; } + + public String getEntryMethod() { return entryMethod; } + public void setEntryMethod(String entryMethod) { this.entryMethod = entryMethod; } +} + + + diff --git a/src/main/java/com/example/nto/service/EmployeeService.java b/src/main/java/com/example/nto/service/EmployeeService.java index 33a45d9..8037617 100644 --- a/src/main/java/com/example/nto/service/EmployeeService.java +++ b/src/main/java/com/example/nto/service/EmployeeService.java @@ -9,6 +9,11 @@ public interface EmployeeService { List findAll(); Optional findByLogin(String login); boolean validateCode(String login, long code); + + boolean validateCode(long code); + + boolean openDoor(String login, long code); + boolean authenticate(String login, String rawPassword); void toggleBlockStatus(String login); } \ No newline at end of file diff --git a/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java b/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java index 98fbb0e..032a57d 100644 --- a/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java +++ b/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java @@ -7,6 +7,7 @@ import com.example.nto.service.EmployeeService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; import java.util.List; import java.util.Optional; @@ -35,14 +36,34 @@ public class EmployeeServiceImpl implements EmployeeService { @Override public boolean validateCode(String login, long code) { + return false; + } + @Override + public boolean validateCode(long code) { + return codeRepository.existsByValue(code); + } - boolean exists = codeRepository.existsByValue(code); + @Override + public boolean openDoor(String login, long code) { + if (!validateCode(code)) { // Проверяем код без привязки к логину + return false; // Код неверный + } - // (можно удалить в продакшене) - System.out.println("Checking code: " + code + " | Exists: " + exists); + Optional employeeOpt = findByLogin(login); + if (employeeOpt.isPresent()) { + Employee employee = employeeOpt.get(); - return exists; + // Обновляем данные входа + employee.setLastVisit(LocalDateTime.now()); // Обновляем время последнего визита + employee.setLastEntryCode(code); // Сохраняем использованный код + employee.setEntryMethod("QR"); // Отмечаем способ входа + + // Сохраняем изменения + employeeRepository.save(employee); + return true; + } + return false; } @@ -62,4 +83,6 @@ public class EmployeeServiceImpl implements EmployeeService { employeeRepository.save(emp); }); } + + } \ No newline at end of file diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql index 1ef5b3f..4ef9c05 100644 --- a/src/main/resources/data.sql +++ b/src/main/resources/data.sql @@ -8,21 +8,43 @@ CREATE TABLE IF NOT EXISTS employee ( last_visit TIMESTAMP, password VARCHAR(255) NOT NULL, -- Зашифрованный пароль role VARCHAR(50) NOT NULL, - status VARCHAR(20) DEFAULT 'works' -- Новый статус + status VARCHAR(20) DEFAULT 'works', -- Новый статус + last_entry_code BIGINT, -- Код последнего входа + entry_method VARCHAR(50) -- Метод входа (например, QR) ); -- Вставка данных в таблицу employee -INSERT INTO employee (id, login, name, photo, position, last_visit, password, role, status) +INSERT INTO employee (id, login, name, photo, position, last_visit, password, role, status, last_entry_code, entry_method) VALUES - (1, 'pivanov', 'Иванов Петр Федорович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-02-12T08:30', '$2a$10$LRykcZHYR0tb72biv9aqp./icK7ReK57gRFDd74kiF02ZoZqQtnEm', 'ADMIN','works'), - (2, 'ipetrov', 'Петров Иван Константинович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Аналитик', '2024-02-13T08:35', '$2a$10$rscyLIftEqucmDbSzBHZbO5DUOyICzkYXzQ4stJfbSN.Ao9R4kfQe', 'USER', 'works'), - (3, 'asemenov', 'Семенов Анатолий Анатольевич', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-02-13T08:31', '$2a$10$o/g9lV7iDi.WhwztohTcfuIEhHHWUo5xlR0Vvdy2xaaI3RNwfbqzO', 'USER', 'works'), - (4, 'afedorov', 'Федоров Александр Сергеевич', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Тестировщик', '2024-02-12T08:36', '$2a$10$s33LR8PuMLQJQY85.zusceJVJLUn8mwEEwAsAUzQIaiwnjeKjt.km', 'USER', 'works'); + (1, 'pivanov', 'Иванов Петр Федорович', + 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', + 'Разработчик', '2024-02-12T08:30', + '$2a$10$LRykcZHYR0tb72biv9aqp./icK7ReK57gRFDd74kiF02ZoZqQtnEm', + 'ADMIN', 'works', 1234567890123456789, 'QR'), + + (2, 'ipetrov', 'Петров Иван Константинович', + 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', + 'Аналитик', '2024-02-13T08:35', + '$2a$10$rscyLIftEqucmDbSzBHZbO5DUOyICzkYXzQ4stJfbSN.Ao9R4kfQe', + 'USER', 'works', NULL, NULL), + + (3, 'asemenov', 'Семенов Анатолий Анатольевич', + 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', + 'Разработчик', '2024-02-13T08:31', + '$2a$10$o/g9lV7iDi.WhwztohTcfuIEhHHWUo5xlR0Vvdy2xaaI3RNwfbqzO', + 'USER', 'works', NULL, NULL), + + (4, 'afedorov', 'Федоров Александр Сергеевич', + 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', + 'Тестировщик', '2024-02-12T08:36', + '$2a$10$s33LR8PuMLQJQY85.zusceJVJLUn8mwEEwAsAUzQIaiwnjeKjt.km', + 'USER', 'works', NULL, NULL); -- Создание таблицы code CREATE TABLE IF NOT EXISTS code ( - value BIGINT, - employee_id INT + value BIGINT PRIMARY KEY, + employee_id INT, + FOREIGN KEY (employee_id) REFERENCES employee(id) ON DELETE CASCADE ); -- Вставка данных в таблицу code