Merge pull request 'develop' (#5) from develop into master
Reviewed-on: #5
This commit is contained in:
commit
3fb6232b4b
@ -42,25 +42,25 @@ public class EmployeeController {
|
||||
return ResponseEntity.ok(employeeService.getByTelephone(telephone));
|
||||
}
|
||||
|
||||
@PutMapping("/{id}")
|
||||
@PutMapping("/{employeeId}")
|
||||
public ResponseEntity<EmployeeDTO> updateEmployee(@PathVariable long employeeId, @RequestBody EmployeeDTO employeeDTO) {
|
||||
return ResponseEntity.ok(employeeService.update(employeeId, employeeDTO));
|
||||
}
|
||||
|
||||
@DeleteMapping("/{id}")
|
||||
@DeleteMapping("/{employeeId}")
|
||||
public ResponseEntity<EmployeeDTO> deleteEmployeeById(@PathVariable long employeeId) {
|
||||
employeeService.delete(employeeId);
|
||||
return ResponseEntity.noContent().build();
|
||||
}
|
||||
|
||||
@PatchMapping("/image/profile/{id}")
|
||||
@PatchMapping("/image/profile/{employeeId}")
|
||||
public ResponseEntity<Void> patchImageProfile(@PathVariable long employeeId, @RequestBody byte[] photo) {
|
||||
String imageUrl = photoService.uploadProfilePhoto(employeeId, photo);
|
||||
employeeService.patchProfileImage(employeeId, imageUrl);
|
||||
return ResponseEntity.noContent().build();
|
||||
}
|
||||
|
||||
@PatchMapping("/block/{id}/{blockStatus}")
|
||||
@PatchMapping("/block/{employeeId}/{blockStatus}")
|
||||
public ResponseEntity<Void> patchImageProfile(@PathVariable long employeeId, @PathVariable boolean blockStatus) {
|
||||
employeeService.patchBlockEmployee(employeeId, blockStatus);
|
||||
return ResponseEntity.noContent().build();
|
||||
|
@ -42,9 +42,10 @@ public class OfficeController {
|
||||
return ResponseEntity.ok(officeService.update(officeId, officeDTO));
|
||||
}
|
||||
|
||||
@DeleteMapping("/{officeId}")
|
||||
public ResponseEntity<Void> deleteOffice(@PathVariable long officeId) {
|
||||
officeService.delete(officeId);
|
||||
return ResponseEntity.noContent().build();
|
||||
}
|
||||
// Тут баг с ссылочной целостностью
|
||||
// @DeleteMapping("/{officeId}")
|
||||
// public ResponseEntity<Void> deleteOffice(@PathVariable long officeId) {
|
||||
// officeService.delete(officeId);
|
||||
// return ResponseEntity.noContent().build();
|
||||
// }
|
||||
}
|
||||
|
@ -39,7 +39,7 @@ public class Terminal {
|
||||
private String code;
|
||||
|
||||
// todo: Протестировать нужен ли тут каскад тип
|
||||
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "office_id", nullable = false)
|
||||
private Office office;
|
||||
|
||||
|
@ -33,11 +33,11 @@ public class Visit {
|
||||
private boolean isFinished = false;
|
||||
|
||||
@ManyToOne(fetch = FetchType.EAGER)
|
||||
@JoinColumn(name = "start_terminal_id", referencedColumnName = "code", nullable = false)
|
||||
@JoinColumn(name = "start_terminal_id", referencedColumnName = "id", nullable = false)
|
||||
private Terminal startTerminal;
|
||||
|
||||
@ManyToOne(fetch = FetchType.EAGER)
|
||||
@JoinColumn(name = "end_terminal_id", referencedColumnName = "code")
|
||||
@JoinColumn(name = "end_terminal_id", referencedColumnName = "id")
|
||||
private Terminal endTerminal;
|
||||
|
||||
@ManyToOne(fetch = FetchType.EAGER)
|
||||
|
@ -22,7 +22,7 @@ public class VisitDTO {
|
||||
|
||||
// Возвращается длительность посещения в формате LocalDateTime.toString(),
|
||||
// превратить обратно можно с помощью LocalDateTime.parse().
|
||||
private String durationVisit;
|
||||
private long durationVisit;
|
||||
private String officeName;
|
||||
|
||||
private String typePassage; // Строка либо PASSAGE_CARD, либо PASSAGE_TELEPHONE
|
||||
|
@ -18,9 +18,15 @@ public class VisitMapper {
|
||||
|
||||
visitDTO.setId(visit.getId());
|
||||
visitDTO.setStartVisit(visit.getStartVisit().toString());
|
||||
visitDTO.setEndVisit(visit.getEndVisit().toString());
|
||||
|
||||
if (visit.getEndVisit() == null) visitDTO.setEndVisit(null);
|
||||
else visitDTO.setEndVisit(visit.getEndVisit().toString());
|
||||
|
||||
visitDTO.setFinished(visit.isFinished());
|
||||
visitDTO.setDurationVisit(Utils.period(visit.getStartVisit(), visit.getEndVisit()).toString());
|
||||
|
||||
if (visit.getEndVisit() == null) visitDTO.setDurationVisit(Utils.period(visit.getStartVisit(), LocalDateTime.now()));
|
||||
else visitDTO.setDurationVisit(Utils.period(visit.getStartVisit(), visit.getEndVisit()));
|
||||
|
||||
visitDTO.setOfficeName(visit.getStartTerminal().getOffice().getName());
|
||||
visitDTO.setTypePassage(visit.getPassage().getPassageName());
|
||||
|
||||
|
@ -27,7 +27,7 @@ public class EmployeeMapper {
|
||||
employeeDTO.setOfficeImageUrl(employee.getOffice().getLinkLogo());
|
||||
employeeDTO.setPositionName(employee.getPosition().getName());
|
||||
employeeDTO.setRole(employee.getRole().getRoleName());
|
||||
employeeDTO.setRole(employee.getProfileImageUrl());
|
||||
employeeDTO.setProfileImageUrl(employee.getProfileImageUrl());
|
||||
employeeDTO.setBlocked(employee.isBlocked());
|
||||
|
||||
List<Visit> visitsLast30Days = Utils.filterDateLast30Days(employee.getVisits());
|
||||
@ -47,7 +47,10 @@ public class EmployeeMapper {
|
||||
currentOfficeName = visit.getStartTerminal().getOffice().getName();
|
||||
}
|
||||
visitsIdLast30Days.add(visit.getId());
|
||||
periods.add(List.of(visit.getStartVisit(), visit.getEndVisit()));
|
||||
|
||||
if (visit.getStartVisit() != null && visit.getEndVisit() != null) {
|
||||
periods.add(List.of(visit.getStartVisit(), visit.getEndVisit()));
|
||||
}
|
||||
}
|
||||
|
||||
employeeDTO.setVisitStatus(visitStatus);
|
||||
|
@ -101,7 +101,7 @@ public class VisitServiceImpl implements VisitService {
|
||||
.orElseThrow(() -> new ResourceNotFoundException("Терминал с id (" + endTerminalId + ") не найден!"));
|
||||
Visit activeVisit = getActiveVisit(employee);
|
||||
|
||||
activeVisit.setStartVisit(LocalDateTime.now());
|
||||
activeVisit.setEndVisit(LocalDateTime.now());
|
||||
activeVisit.setFinished(true);
|
||||
activeVisit.setEndTerminal(terminal);
|
||||
|
||||
@ -117,7 +117,7 @@ public class VisitServiceImpl implements VisitService {
|
||||
}
|
||||
|
||||
private static Visit getActiveVisit(Employee employee) {
|
||||
List<Visit> visits = employee.getVisits().stream().filter(Visit::isFinished).collect(Collectors.toList());
|
||||
List<Visit> visits = employee.getVisits().stream().filter(visit -> !visit.isFinished()).collect(Collectors.toList());
|
||||
|
||||
if (visits.size() == 1) return visits.get(0);
|
||||
else throw new IllegalStateException("Пользователь не может находится в суперпозиции");
|
||||
|
@ -4,7 +4,8 @@ import com.example.nto.config.ObjectStorageConfig;
|
||||
import com.example.nto.domain.entity.Visit;
|
||||
import lombok.experimental.UtilityClass;
|
||||
|
||||
import java.time.*;
|
||||
import java.time.Duration;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.ArrayList;
|
||||
@ -41,15 +42,17 @@ public class Utils {
|
||||
}
|
||||
}
|
||||
|
||||
public static LocalDateTime period(LocalDateTime dtStart, LocalDateTime dtEnd) {
|
||||
public static Long period(LocalDateTime dtStart, LocalDateTime dtEnd) {
|
||||
// Возвращает разницу между двумя LocalDateTime
|
||||
Period period = Period.between(dtStart.toLocalDate(), dtEnd.toLocalDate());
|
||||
Duration duration = Duration.between(dtStart.toLocalTime(), dtEnd.toLocalTime());
|
||||
// Period period = Period.between(dtStart.toLocalDate(), dtEnd.toLocalDate());
|
||||
// Duration duration = Duration.between(dtStart.toLocalTime(), dtEnd.toLocalTime());
|
||||
|
||||
LocalDate localDate = LocalDate.of(period.getYears(), period.getMonths(), period.getDays());
|
||||
LocalTime localTime = LocalTime.of(duration.toHoursPart(), duration.toMinutesPart(), duration.toSecondsPart());
|
||||
return Duration.between(dtStart, dtEnd).toMinutes();
|
||||
|
||||
return LocalDateTime.of(localDate, localTime);
|
||||
// LocalDate localDate = LocalDate.of(period.getYears(), period.getMonths(), period.getDays());
|
||||
// LocalTime localTime = LocalTime.of(duration.toHoursPart(), duration.toMinutesPart(), duration.toSecondsPart());
|
||||
//
|
||||
// return LocalDateTime.of(localDate, localTime);
|
||||
}
|
||||
|
||||
public static long periods(List<List<LocalDateTime>> periods) {
|
||||
@ -76,7 +79,7 @@ public class Utils {
|
||||
public static String getRandomUrlProfileImage() {
|
||||
int max = 26, min = 1;
|
||||
String fileName = profileFileName(new Random().nextInt(max - min + 1) + min) + ".jpg";
|
||||
return storageConfig.getS3Endpoint() + "/" + storageConfig.getBucketName() + "/standard/" + fileName;
|
||||
return "https://storage.yandexcloud.net/spring-boot-final-nto-bacet/standard/" + fileName;
|
||||
}
|
||||
|
||||
public static String convertDistance(float distance) {
|
||||
|
@ -1,2 +1,2 @@
|
||||
name;code;office_id
|
||||
Первый считыватель в Москве;313123323232312;1
|
||||
Первый считыватель в Москве;313123FFFF323232312;1
|
|
Loading…
x
Reference in New Issue
Block a user