#91 using RestTemplate & show error on timetable loading exception
This commit is contained in:
parent
505a054cc8
commit
193b2b3a32
@ -51,6 +51,6 @@ public class UserMvcController extends OdinController<UserListDto, UserDto> {
|
||||
|
||||
@GetMapping("/dashboard")
|
||||
public void getUsersDashboard(ModelMap modelMap) {
|
||||
modelMap.addAttribute("users", userService.getUsersInfo());
|
||||
modelMap.addAllAttributes(userService.getUsersInfo());
|
||||
}
|
||||
}
|
||||
|
@ -42,10 +42,10 @@ import ru.ulstu.user.repository.UserRepository;
|
||||
import ru.ulstu.user.repository.UserRoleRepository;
|
||||
import ru.ulstu.user.util.UserUtils;
|
||||
import ru.ulstu.utils.timetable.TimetableService;
|
||||
import ru.ulstu.utils.timetable.errors.TimetableClientException;
|
||||
import ru.ulstu.utils.timetable.model.Lesson;
|
||||
|
||||
import javax.mail.MessagingException;
|
||||
import java.io.IOException;
|
||||
import java.text.ParseException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
@ -358,14 +358,16 @@ public class UserService implements UserDetailsService {
|
||||
}
|
||||
}
|
||||
|
||||
public List<UserInfoNow> getUsersInfo() {
|
||||
public Map<String, Object> getUsersInfo() {
|
||||
List<UserInfoNow> usersInfoNow = new ArrayList<>();
|
||||
String err = "";
|
||||
|
||||
for (User user : userRepository.findAll()) {
|
||||
Lesson lesson = null;
|
||||
try {
|
||||
lesson = timetableService.getCurrentLesson(user.getUserAbbreviate());
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} catch (TimetableClientException e) {
|
||||
err = "Не удалось загрузить расписание";
|
||||
}
|
||||
usersInfoNow.add(new UserInfoNow(
|
||||
lesson,
|
||||
@ -374,6 +376,6 @@ public class UserService implements UserDetailsService {
|
||||
userSessionService.isOnline(user))
|
||||
);
|
||||
}
|
||||
return usersInfoNow;
|
||||
return ImmutableMap.of("users", usersInfoNow, "error", err);
|
||||
}
|
||||
}
|
||||
|
@ -1,15 +1,12 @@
|
||||
package ru.ulstu.utils.timetable;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.springframework.web.client.RestClientException;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
import ru.ulstu.utils.timetable.errors.TimetableClientException;
|
||||
import ru.ulstu.utils.timetable.model.Lesson;
|
||||
import ru.ulstu.utils.timetable.model.TimetableResponse;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
import java.net.URLEncoder;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Calendar;
|
||||
@ -17,7 +14,7 @@ import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
public class TimetableService {
|
||||
private static final String TIMETABLE_URL = "http://timetable.athene.tech";
|
||||
private static final String TIMETABLE_URL = "http://timetable.athene.tech/api/1.0/timetable?filter=%s";
|
||||
private SimpleDateFormat lessonTimeFormat = new SimpleDateFormat("hh:mm");
|
||||
|
||||
private long[] lessonsStarts = new long[] {
|
||||
@ -30,7 +27,8 @@ public class TimetableService {
|
||||
lessonTimeFormat.parse("18:10:00").getTime(),
|
||||
};
|
||||
|
||||
public TimetableService() throws ParseException { }
|
||||
public TimetableService() throws ParseException {
|
||||
}
|
||||
|
||||
private int getCurrentDay() {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
@ -42,6 +40,7 @@ public class TimetableService {
|
||||
long lessonDuration = 90 * 60000;
|
||||
Date now = new Date();
|
||||
long timeNow = now.getTime() % (24 * 60 * 60 * 1000L);
|
||||
|
||||
for (int i = 0; i < lessonsStarts.length; i++) {
|
||||
if (timeNow > lessonsStarts[i] && timeNow < lessonsStarts[i] + lessonDuration) {
|
||||
return i;
|
||||
@ -56,31 +55,26 @@ public class TimetableService {
|
||||
return (cal.get(Calendar.WEEK_OF_YEAR) + 1) % 2;
|
||||
}
|
||||
|
||||
private TimetableResponse getTimetableForUser(String userFIO) throws IOException {
|
||||
URL url = new URL(TIMETABLE_URL + "/api/1.0/timetable?filter=" + URLEncoder.encode(userFIO, "UTF-8"));
|
||||
HttpURLConnection con = (HttpURLConnection) url.openConnection();
|
||||
con.setRequestMethod("GET");
|
||||
|
||||
BufferedReader in = new BufferedReader(
|
||||
new InputStreamReader(con.getInputStream()));
|
||||
String inputLine;
|
||||
StringBuilder content = new StringBuilder();
|
||||
while ((inputLine = in.readLine()) != null) {
|
||||
content.append(inputLine);
|
||||
}
|
||||
in.close();
|
||||
|
||||
return new ObjectMapper().readValue(content.toString(), TimetableResponse.class);
|
||||
private TimetableResponse getTimetableForUser(String userFIO) throws RestClientException {
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
return restTemplate.getForObject(String.format(TIMETABLE_URL, userFIO), TimetableResponse.class);
|
||||
}
|
||||
|
||||
public Lesson getCurrentLesson(String userFio) {
|
||||
TimetableResponse response;
|
||||
try {
|
||||
response = getTimetableForUser(userFio);
|
||||
} catch (RestClientException e) {
|
||||
e.printStackTrace();
|
||||
throw new TimetableClientException(userFio);
|
||||
}
|
||||
|
||||
public Lesson getCurrentLesson(String userFio) throws IOException {
|
||||
TimetableResponse response = getTimetableForUser(userFio);
|
||||
int lessonNumber = getCurrentLessonNumber();
|
||||
if (lessonNumber < 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
List<Object> lessons = response
|
||||
List<Lesson> lessons = response
|
||||
.getResponse()
|
||||
.getWeeks()
|
||||
.get(getCurrentWeek())
|
||||
|
@ -0,0 +1,7 @@
|
||||
package ru.ulstu.utils.timetable.errors;
|
||||
|
||||
public class TimetableClientException extends RuntimeException {
|
||||
public TimetableClientException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
@ -1,12 +1,13 @@
|
||||
package ru.ulstu.utils.timetable.model;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class Day {
|
||||
|
||||
private Integer day;
|
||||
private List<List<Object>> lessons = null;
|
||||
private List<List<Lesson>> lessons = new ArrayList<>();
|
||||
|
||||
public Integer getDay() {
|
||||
return day;
|
||||
@ -16,11 +17,11 @@ public class Day {
|
||||
this.day = day;
|
||||
}
|
||||
|
||||
public List<List<Object>> getLessons() {
|
||||
public List<List<Lesson>> getLessons() {
|
||||
return lessons;
|
||||
}
|
||||
|
||||
public void setLessons(List<List<Object>> lessons) {
|
||||
public void setLessons(List<List<Lesson>> lessons) {
|
||||
this.lessons = lessons;
|
||||
}
|
||||
}
|
||||
|
@ -6,9 +6,6 @@ public class Lesson {
|
||||
private String teacher;
|
||||
private String room;
|
||||
|
||||
public Lesson() {
|
||||
}
|
||||
|
||||
public String getGroup() {
|
||||
return group;
|
||||
}
|
||||
|
@ -1,10 +1,11 @@
|
||||
package ru.ulstu.utils.timetable.model;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Response {
|
||||
|
||||
private List<Week> weeks = null;
|
||||
private List<Week> weeks = new ArrayList<>();
|
||||
|
||||
public List<Week> getWeeks() {
|
||||
return weeks;
|
||||
|
@ -1,10 +1,12 @@
|
||||
package ru.ulstu.utils.timetable.model;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Week {
|
||||
public class Week implements Serializable {
|
||||
|
||||
private List<Day> days = null;
|
||||
private List<Day> days = new ArrayList<>();
|
||||
|
||||
public List<Day> getDays() {
|
||||
return days;
|
||||
|
@ -24,7 +24,7 @@ spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFact
|
||||
# JPA Settings
|
||||
spring.datasource.url=jdbc:postgresql://localhost:5432/ng-tracker
|
||||
spring.datasource.username=postgres
|
||||
spring.datasource.password=postgres
|
||||
spring.datasource.password=password
|
||||
spring.datasource.driverclassName=org.postgresql.Driver
|
||||
spring.jpa.hibernate.ddl-auto=validate
|
||||
# Liquibase Settings
|
||||
@ -34,6 +34,6 @@ liquibase.change-log=classpath:db/changelog-master.xml
|
||||
# Application Settings
|
||||
ng-tracker.base-url=http://127.0.0.1:8080
|
||||
ng-tracker.undead-user-login=admin
|
||||
ng-tracker.dev-mode=true
|
||||
ng-tracker.dev-mode=false
|
||||
ng-tracker.use-https=false
|
||||
ng-tracker.check-run=false
|
@ -3,15 +3,18 @@
|
||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||
layout:decorator="default" xmlns:th="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<script src="/js/core.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="container" layout:fragment="content">
|
||||
<section id="services">
|
||||
<div class="container">
|
||||
<div class="col-lg-12 text-center">
|
||||
<h2 class="section-heading text-uppercase">Пользователи</h2>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<h2 th:text="${error}">teste</h2>
|
||||
</div>
|
||||
<div class="row justify-content-center" id="dashboard">
|
||||
<th:block th:each="user : ${users}">
|
||||
<div th:replace="users/fragments/userDashboardFragment :: userDashboard(user=${user})"/>
|
||||
@ -19,6 +22,14 @@
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<script th:inline="javascript">
|
||||
/*<![CDATA[*/
|
||||
$(document).ready(function () {
|
||||
var error = /*[[${error}]]*/
|
||||
showFeedbackMessage(error, MessageTypesEnum.WARNING)
|
||||
});
|
||||
/*]]>*/
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user