diff --git a/src/main/java/com/example/nto/dto/mappers/OfficeMapper.java b/src/main/java/com/example/nto/dto/mappers/OfficeMapper.java index 193555d..ae651bb 100644 --- a/src/main/java/com/example/nto/dto/mappers/OfficeMapper.java +++ b/src/main/java/com/example/nto/dto/mappers/OfficeMapper.java @@ -1,4 +1,48 @@ package com.example.nto.dto.mappers; +import com.example.nto.domain.entity.Office; +import com.example.nto.dto.entity.OfficeDTO; +import com.example.nto.dto.mappers.employee.EmployeeItemMapper; +import lombok.experimental.UtilityClass; + +import java.util.stream.Collectors; + +@UtilityClass public class OfficeMapper { + public static OfficeDTO convertToDTO(Office office) { + OfficeDTO officeDTO = new OfficeDTO(); + + officeDTO.setId(office.getId()); + officeDTO.setName(office.getName()); + officeDTO.setDescription(office.getDescription()); + officeDTO.setAddress(office.getAddress()); + officeDTO.setLatitude(office.getLatitude()); + officeDTO.setLongitude(office.getLongitude()); + officeDTO.setLinkLogo(office.getLinkLogo()); + officeDTO.setTelephone(office.getTelephone()); + officeDTO.setEmail(office.getEmail()); + + officeDTO.setEmployees(office.getEmployeeList().stream().map(EmployeeItemMapper::convertToDTO).collect(Collectors.toList())); + officeDTO.setTerminals(office.getTerminals().stream().map(TerminalMapper::convertToDTO).collect(Collectors.toList())); + + return officeDTO; + } + + public static Office convertFromDTO(OfficeDTO officeDTO) { + Office office = new Office(); + + office.setId(officeDTO.getId()); + office.setName(officeDTO.getName()); + office.setDescription(officeDTO.getDescription()); + office.setAddress(officeDTO.getAddress()); + office.setLatitude(officeDTO.getLatitude()); + office.setLongitude(officeDTO.getLongitude()); + office.setLinkLogo(officeDTO.getLinkLogo()); + office.setTelephone(officeDTO.getTelephone()); + office.setEmail(officeDTO.getEmail()); + + // todo: Проверить, возможно, здесь нужно office.setEmployeeList() и office.setTerminals() + + return office; + } } diff --git a/src/main/java/com/example/nto/dto/mappers/PositionMapper.java b/src/main/java/com/example/nto/dto/mappers/PositionMapper.java index 486b848..5ec7a0e 100644 --- a/src/main/java/com/example/nto/dto/mappers/PositionMapper.java +++ b/src/main/java/com/example/nto/dto/mappers/PositionMapper.java @@ -1,4 +1,21 @@ package com.example.nto.dto.mappers; +import com.example.nto.domain.entity.Position; +import com.example.nto.dto.entity.PositionDTO; +import com.example.nto.dto.mappers.employee.EmployeeItemMapper; +import lombok.experimental.UtilityClass; + +import java.util.stream.Collectors; + +@UtilityClass public class PositionMapper { -} + public static PositionDTO convertToDTO(Position position) { + PositionDTO positionDTO = new PositionDTO(); + + positionDTO.setId(position.getId()); + positionDTO.setName(position.getName()); + positionDTO.setEmployeeItemDTOList(position.getEmployees().stream().map(EmployeeItemMapper::convertToDTO).collect(Collectors.toList())); + + return positionDTO; + } +} \ No newline at end of file diff --git a/src/main/java/com/example/nto/dto/mappers/TerminalMapper.java b/src/main/java/com/example/nto/dto/mappers/TerminalMapper.java index 168c442..e9defbf 100644 --- a/src/main/java/com/example/nto/dto/mappers/TerminalMapper.java +++ b/src/main/java/com/example/nto/dto/mappers/TerminalMapper.java @@ -1,4 +1,29 @@ package com.example.nto.dto.mappers; +import com.example.nto.domain.entity.Office; +import com.example.nto.domain.entity.Terminal; +import com.example.nto.dto.entity.TerminalDTO; +import lombok.experimental.UtilityClass; + +@UtilityClass public class TerminalMapper { + public static TerminalDTO convertToDTO(Terminal terminal) { + TerminalDTO terminalDTO = new TerminalDTO(); + + terminalDTO.setId(terminal.getId()); + terminalDTO.setName(terminal.getName()); + terminalDTO.setCode(terminal.getCode()); + terminalDTO.setOfficeName(terminal.getOffice().getName()); + + return terminalDTO; + } + + public static Terminal convertFromDTO(TerminalDTO terminalDTO, Office office) { + Terminal terminal = new Terminal(); + + terminal.setName(terminalDTO.getName()); + terminal.setOffice(office); + + return terminal; + } } diff --git a/src/main/java/com/example/nto/dto/mappers/VisitMapper.java b/src/main/java/com/example/nto/dto/mappers/VisitMapper.java index 8d969c8..98f44f8 100644 --- a/src/main/java/com/example/nto/dto/mappers/VisitMapper.java +++ b/src/main/java/com/example/nto/dto/mappers/VisitMapper.java @@ -1,4 +1,42 @@ package com.example.nto.dto.mappers; + +import com.example.nto.domain.entity.Employee; +import com.example.nto.domain.entity.Passage; +import com.example.nto.domain.entity.Terminal; +import com.example.nto.domain.entity.Visit; +import com.example.nto.dto.entity.VisitDTO; +import com.example.nto.utils.Utils; +import lombok.experimental.UtilityClass; + +import java.time.LocalDateTime; + +@UtilityClass public class VisitMapper { + public static VisitDTO convertToDTO(Visit visit) { + VisitDTO visitDTO = new VisitDTO(); + + visitDTO.setId(visit.getId()); + visitDTO.setStartVisit(visit.getStartVisit().toString()); + visitDTO.setEndVisit(visit.getEndVisit().toString()); + visitDTO.setFinished(visit.isFinished()); + visitDTO.setDurationVisit(Utils.period(visit.getStartVisit(), visit.getEndVisit()).toString()); + visitDTO.setOfficeName(visit.getStartTerminal().getOffice().getName()); + visitDTO.setTypePassage(visit.getPassage().getPassageName()); + + return visitDTO; + } + + public static Visit convertFromDTO(Terminal terminal, Employee employee, Passage passage) { + Visit visit = new Visit(); + + visit.setEmployee(employee); + visit.setStartVisit(LocalDateTime.now()); + visit.setFinished(false); + visit.setStartTerminal(terminal); + visit.setPassage(passage); + + return visit; + } } + diff --git a/src/main/java/com/example/nto/dto/mappers/employee/EmployeeCreateMapper.java b/src/main/java/com/example/nto/dto/mappers/employee/EmployeeCreateMapper.java index 4a2098d..fb751e5 100644 --- a/src/main/java/com/example/nto/dto/mappers/employee/EmployeeCreateMapper.java +++ b/src/main/java/com/example/nto/dto/mappers/employee/EmployeeCreateMapper.java @@ -26,6 +26,7 @@ public class EmployeeCreateMapper { employee.setPosition(position); employee.setRole(role); employee.setProfileImageUrl(Utils.getRandomUrlProfileImage()); + employee.setBlocked(false); return employee; } diff --git a/src/main/java/com/example/nto/dto/mappers/employee/EmployeeItemMapper.java b/src/main/java/com/example/nto/dto/mappers/employee/EmployeeItemMapper.java index 1fffbe6..68cf90d 100644 --- a/src/main/java/com/example/nto/dto/mappers/employee/EmployeeItemMapper.java +++ b/src/main/java/com/example/nto/dto/mappers/employee/EmployeeItemMapper.java @@ -1,4 +1,31 @@ package com.example.nto.dto.mappers.employee; +import com.example.nto.domain.entity.Employee; +import com.example.nto.domain.entity.Visit; +import com.example.nto.dto.entity.employee.EmployeeItemDTO; +import com.example.nto.utils.Utils; +import lombok.experimental.UtilityClass; + +import java.util.List; + +@UtilityClass public class EmployeeItemMapper { + public static EmployeeItemDTO convertToDTO(Employee employee) { + EmployeeItemDTO employeeItemDTO = new EmployeeItemDTO(); + employeeItemDTO.setId(employee.getId()); + employeeItemDTO.setName(employee.getName()); + employeeItemDTO.setSurname(employee.getSurname()); + employeeItemDTO.setPatronymic(employee.getPatronymic()); + employeeItemDTO.setProfileImageUrl(employee.getProfileImageUrl()); + employeeItemDTO.setOfficeName(employee.getOffice().getName()); + employeeItemDTO.setPosition(employee.getPosition().getName()); + employeeItemDTO.setBlocked(employee.isBlocked()); + + // todo: Протестировать работу! + + List visitsLast30Days = Utils.filterDateLast30Days(employee.getVisits()); + employeeItemDTO.setVisitStatus(visitsLast30Days.stream().anyMatch(visit -> !visit.isFinished())); + + return employeeItemDTO; + } } diff --git a/src/main/java/com/example/nto/dto/mappers/employee/EmployeeMapper.java b/src/main/java/com/example/nto/dto/mappers/employee/EmployeeMapper.java index 5d3b16b..62fae69 100644 --- a/src/main/java/com/example/nto/dto/mappers/employee/EmployeeMapper.java +++ b/src/main/java/com/example/nto/dto/mappers/employee/EmployeeMapper.java @@ -1,4 +1,79 @@ package com.example.nto.dto.mappers.employee; +import com.example.nto.domain.entity.*; +import com.example.nto.dto.entity.employee.EmployeeDTO; +import com.example.nto.utils.Utils; +import lombok.experimental.UtilityClass; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +@UtilityClass public class EmployeeMapper { + public static EmployeeDTO convertToDTO(Employee employee) { + EmployeeDTO employeeDTO = new EmployeeDTO(); + + employeeDTO.setId(employee.getId()); + employeeDTO.setName(employee.getName()); + employeeDTO.setSurname(employee.getSurname()); + employeeDTO.setPatronymic(employee.getPatronymic()); + employeeDTO.setTelephone(employee.getTelephone()); + employeeDTO.setEmail(employee.getEmail()); + + employeeDTO.setOfficeId(employee.getOffice().getId()); + employeeDTO.setOfficeName(employee.getOffice().getName()); + employeeDTO.setOfficeImageUrl(employee.getOffice().getLinkLogo()); + employeeDTO.setPosition(employee.getPosition().getName()); + employeeDTO.setRole(employee.getRole().getRoleName()); + employeeDTO.setRole(employee.getProfileImageUrl()); + employeeDTO.setBlocked(employee.isBlocked()); + + List visitsLast30Days = Utils.filterDateLast30Days(employee.getVisits()); + + boolean visitStatus = false; + String startVisitDateTime = null; + String currentOfficeName = null; + List visitsIdLast30Days = new ArrayList<>(visitsLast30Days.size()); + List> periods = new ArrayList<>(visitsLast30Days.size()); + + for (Visit visit : visitsLast30Days) { + if (!visit.isFinished()) { + if (visitStatus) throw new IllegalStateException("У работника два посещения одновременно!"); + + visitStatus = true; + startVisitDateTime = visit.getStartVisit().toString(); + currentOfficeName = visit.getStartTerminal().getOffice().getName(); + } + visitsIdLast30Days.add(visit.getId()); + periods.add(List.of(visit.getStartVisit(), visit.getEndVisit())); + } + + employeeDTO.setVisitStatus(visitStatus); + employeeDTO.setStartVisitDateTime(startVisitDateTime); + employeeDTO.setCurrentOfficeName(currentOfficeName); + employeeDTO.setVisitsIdLast30Days(visitsIdLast30Days); + employeeDTO.setTotalTimeVisitsLast30Days(Utils.periods(periods)); + employeeDTO.setCreateAt(employee.getCreatedAt().toString()); + + return employeeDTO; + } + + public static Employee convertFromDTO(EmployeeDTO employeeDTO, Office office, Position position, Role role) { + Employee employee = new Employee(); + + employee.setName(employeeDTO.getName()); + employee.setSurname(employeeDTO.getSurname()); + employee.setPatronymic(employeeDTO.getPatronymic()); + employee.setTelephone(employeeDTO.getTelephone()); + employee.setEmail(employeeDTO.getEmail()); + employee.setOffice(office); + employee.setPosition(position); + employee.setRole(role); + employee.setProfileImageUrl(employeeDTO.getProfileImageUrl()); + employee.setBlocked(employeeDTO.isBlocked()); + + return employee; + } } +