Skip to content

Commit d0ba04e

Browse files
committed
optimize code
1 parent 8441bbc commit d0ba04e

File tree

6 files changed

+106
-71
lines changed

6 files changed

+106
-71
lines changed

src/main/java/com/zzhpro/movie/aop/MethodTimeAspect.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.zzhpro.movie.aop;
22

33
import com.google.common.collect.Lists;
4+
import com.zzhpro.movie.util.ConstantUtils;
45
import lombok.extern.slf4j.Slf4j;
56
import org.apache.commons.lang3.time.StopWatch;
67
import org.aspectj.lang.JoinPoint;
@@ -34,7 +35,7 @@ public Object recordMethodTime(ProceedingJoinPoint joinPoint) throws Throwable {
3435
watch.start();
3536
Object object = joinPoint.proceed();
3637
watch.stop();
37-
log.info("{} {} cost {} ms",
38+
log.info("method: {}, parameters: {} costs {} ms",
3839
methodSignature.getMethod().getName(),
3940
getParameterArray(joinPoint),
4041
watch.getTime());
@@ -50,6 +51,6 @@ private String getParameterArray(JoinPoint joinPoint) {
5051
for (Object parameter : parameters) {
5152
parametersList.add(parameter.toString());
5253
}
53-
return parametersList.toString();
54+
return String.join(ConstantUtils.SEPARATOR, parametersList);
5455
}
5556
}

src/main/java/com/zzhpro/movie/entity/Film.java

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import lombok.Builder;
1010
import lombok.Data;
1111
import lombok.NoArgsConstructor;
12+
import org.apache.commons.lang3.StringUtils;
1213

1314
import javax.persistence.Column;
1415
import javax.persistence.Entity;
@@ -65,24 +66,31 @@ public class Film implements Serializable {
6566
@TableField("movie_type")
6667
private MovieTypeEnum movieTypeEnum;
6768

68-
public static Film transformMovieAndOldFilmToNewFilm(Film newFilm, MovieTypeEnum movieTypeEnum,
69-
Film oldFilm) {
69+
public static Film transformMovieAndOldFilmToNewFilm(Film newFilm, Film oldFilm) {
7070
if (Objects.isNull(oldFilm)) {
7171
return newFilm;
7272
}
73+
74+
newFilm.setId(oldFilm.getId());
7375
newFilm.setGenres(oldFilm.getGenres());
7476
newFilm.setSummary(oldFilm.getSummary());
7577

76-
if (MovieTypeEnum.TOP.equals(movieTypeEnum)) {
77-
newFilm.setDirectors(oldFilm.directors);
78-
newFilm.setCasts(oldFilm.casts);
79-
newFilm.setMovieYear(oldFilm.movieYear);
80-
newFilm.setRating(oldFilm.rating);
78+
if (StringUtils.isNotBlank(oldFilm.getDirectors())) {
79+
newFilm.setDirectors(oldFilm.getDirectors());
80+
}
81+
82+
if (StringUtils.isNotBlank(oldFilm.getCasts())) {
83+
newFilm.setCasts(oldFilm.getCasts());
8184
}
8285

83-
if (Objects.nonNull(oldFilm.getId())) {
84-
newFilm.setId(oldFilm.getId());
86+
if (oldFilm.getMovieYear() != 0) {
87+
newFilm.setMovieYear(oldFilm.getMovieYear());
8588
}
89+
90+
if (!Objects.equals(0d, oldFilm.getRating())) {
91+
newFilm.setRating(oldFilm.getRating());
92+
}
93+
8694
return newFilm;
8795
}
8896
}

src/main/java/com/zzhpro/movie/schedule/ScheduleTask.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ public class ScheduleTask {
2424
@Scheduled(cron = "0 0 22 * * ?", zone = ZONE)
2525
public void updateMovie() {
2626
movieService.syncMovies(MovieTypeEnum.RECENT);
27-
log.info("update movie successfully");
27+
log.info("update recent movies successfully");
2828
}
2929

3030
@Scheduled(cron = "0 30 22 * * ?", zone = ZONE)
3131
public void updateTopMovie() {
3232
movieService.syncMovies(MovieTypeEnum.TOP);
33-
log.info("update top movie successfully");
33+
log.info("update top movies successfully");
3434
}
3535
}

src/main/java/com/zzhpro/movie/service/MovieService.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ private void saveMovie(MovieTypeEnum movieTypeEnum) {
6969
return;
7070
}
7171
this.deleteOutDatedMovie(movieTypeEnum);
72-
this.saveFilmList(filmList, movieTypeEnum);
72+
this.saveFilmList(filmList);
7373
}
7474

7575
private void deleteOutDatedMovie(MovieTypeEnum movieTypeEnum) {
@@ -79,10 +79,10 @@ private void deleteOutDatedMovie(MovieTypeEnum movieTypeEnum) {
7979
log.info("set old {} {} movies to normal movies", movieTypeEnum, filmList.size());
8080
}
8181

82-
private void saveFilmList(List<Film> movieList, MovieTypeEnum movieTypeEnum) {
82+
private void saveFilmList(List<Film> movieList) {
8383
List<Film> filmList = movieList.stream()
8484
.map(movie -> Film.transformMovieAndOldFilmToNewFilm(
85-
movie, movieTypeEnum, dataService.findByMovieId(movie.getMovieId())))
85+
movie, dataService.findByMovieId(movie.getMovieId())))
8686
.collect(Collectors.toList());
8787
this.batchUpdateFilmList(filmList);
8888
}
@@ -106,7 +106,7 @@ private void saveDetailToMovie(MovieTypeEnum movieTypeEnum) {
106106
executorService)
107107
.thenApply(movieSubject -> {
108108
if (Objects.nonNull(movieSubject)) {
109-
newFilmList.add(Film.transformMovieAndOldFilmToNewFilm(film, movieTypeEnum, movieSubject));
109+
newFilmList.add(Film.transformMovieAndOldFilmToNewFilm(film, movieSubject));
110110
return true;
111111
}
112112
return false;

src/main/java/com/zzhpro/movie/service/db/PageDataService.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515

1616
import java.util.List;
1717
import java.util.Map;
18-
import java.util.Objects;
1918

2019
/**
2120
* @author zhihao zhang
@@ -53,11 +52,7 @@ public Page<Film> getFilmBySearchText(String searchText, Pageable pageable) {
5352
}
5453

5554
for (int i = 1; i < specificationList.size(); i++) {
56-
if (Objects.nonNull(specification)) {
57-
specification = specification.or(specificationList.get(i));
58-
} else {
59-
specification = Specification.where(specificationList.get(i));
60-
}
55+
specification = specification.or(specificationList.get(i));
6156
}
6257

6358
return filmRepository.findAll(specification, pageable);

src/main/java/com/zzhpro/movie/util/JsoupUtils.java

Lines changed: 79 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import java.net.URL;
1515
import java.time.LocalDateTime;
1616
import java.util.List;
17+
import java.util.Objects;
1718
import java.util.Optional;
1819
import java.util.stream.Collectors;
1920

@@ -38,6 +39,11 @@ public List<Film> getFilmListFromDouban() {
3839
try {
3940
Document document = Jsoup.parse(new URL(RECENT_URL), 30000);
4041
Element element = document.getElementById(NOWPLAYING);
42+
43+
if (Objects.isNull(element)) {
44+
return filmList;
45+
}
46+
4147
Elements elements = element.getElementsByClass("list-item");
4248
elements.forEach(item -> filmList.add(Film.builder()
4349
.movieId(Long.valueOf(item.attr("id")))
@@ -67,6 +73,9 @@ public List<Film> getTopFilmListFromDouban() {
6773
try {
6874
Document document = Jsoup.parse(new URL(TOP_DOUBAN_URL.concat(String.valueOf(i * gap))), 30000);
6975
Element gridView = document.getElementById("content");
76+
if (Objects.isNull(gridView)) {
77+
return filmList;
78+
}
7079
Elements liElements = gridView.getElementsByTag("li");
7180
filmList.addAll(liElements.stream()
7281
.map(item -> {
@@ -106,19 +115,27 @@ private Film getFilmDetailFromUrl(String url) {
106115
}
107116
try {
108117
Document document = Jsoup.parse(new URL(url), 30000);
118+
String summary = null;
119+
String genres = null;
109120
Element summaryElement = document.getElementById("link-report");
110-
Elements summaryElements = summaryElement.getElementsByTag("span");
121+
if (Objects.nonNull(summaryElement)) {
122+
Elements summaryElements = summaryElement.getElementsByTag("span");
123+
summary = StringUtils.strip(summaryElements.get(0).text());
124+
}
111125

112126
Element infoElement = document.getElementById("info");
113-
Elements spanElements = infoElement.getElementsByTag("span");
114-
List<String> genreList = spanElements.stream()
115-
.filter(item -> "v:genre".equals(item.attr(PROPERTY)))
116-
.map(Element::text)
117-
.collect(Collectors.toList());
127+
if (Objects.nonNull(infoElement)) {
128+
Elements spanElements = infoElement.getElementsByTag("span");
129+
List<String> genreList = spanElements.stream()
130+
.filter(item -> "v:genre".equals(item.attr(PROPERTY)))
131+
.map(Element::text)
132+
.collect(Collectors.toList());
133+
genres = StringUtils.join(genreList, ConstantUtils.SEPARATOR);
134+
}
118135

119136
return Film.builder()
120-
.summary((StringUtils.strip(summaryElements.get(0).text())))
121-
.genres(StringUtils.join(genreList, ConstantUtils.SEPARATOR))
137+
.summary(summary)
138+
.genres(genres)
122139
.build();
123140
} catch (Exception e) {
124141
log.error("failed to get detail from url: {}", url, e);
@@ -132,52 +149,66 @@ private Film getTopFilmDetailFromUrl(String url) {
132149
}
133150
try {
134151
Document document = Jsoup.parse(new URL(url), 30000);
152+
String summary = null;
153+
String genres;
135154
Element summaryElement = document.getElementById("link-report");
136-
Elements summaryElements = summaryElement.getElementsByTag("span");
137-
138-
Element infoElement = document.getElementById("info");
139-
Elements spanElements = infoElement.getElementsByTag("span");
140-
List<String> genreList = spanElements.stream()
141-
.filter(item -> "v:genre".equals(item.attr(PROPERTY)))
142-
.map(Element::text)
143-
.collect(Collectors.toList());
144-
145-
Elements aElements = infoElement.getElementsByTag("a");
146-
List<String> directorList = aElements.stream()
147-
.filter(item -> "v:directedBy".equals(item.attr("rel")))
148-
.map(Element::text)
149-
.collect(Collectors.toList());
150-
151-
List<String> actorList = aElements.stream()
152-
.filter(item -> "v:starring".equals(item.attr("rel")))
153-
.map(Element::text)
154-
.limit(5)
155-
.collect(Collectors.toList());
156-
157-
Optional<Integer> movieYear = spanElements.stream()
158-
.filter(item -> "v:initialReleaseDate".equals(item.attr(PROPERTY)))
159-
.map(Element::text)
160-
.map(item -> Integer.parseInt(item.substring(0, 4)))
161-
.limit(1)
162-
.findFirst();
155+
if (Objects.nonNull(summaryElement)) {
156+
Elements summaryElements = summaryElement.getElementsByTag("span");
157+
summary = StringUtils.strip(summaryElements.get(0).text());
158+
}
163159

164160
Element ratingElement = document.getElementById("interest_sectl");
165-
Elements strongElements = ratingElement.getElementsByTag("strong");
166-
Optional<Double> rating = strongElements.stream()
167-
.filter(item -> "v:average".equals(item.attr(PROPERTY)))
168-
.map(Element::text)
169-
.map(Double::parseDouble)
170-
.limit(1)
171-
.findFirst();
161+
Optional<Double> rating = Optional.of(0d);
162+
if (Objects.nonNull(ratingElement)) {
163+
Elements strongElements = ratingElement.getElementsByTag("strong");
164+
rating = strongElements.stream()
165+
.filter(item -> "v:average".equals(item.attr(PROPERTY)))
166+
.map(Element::text)
167+
.map(Double::parseDouble)
168+
.limit(1)
169+
.findFirst();
170+
}
172171

173-
return Film.builder()
174-
.summary((StringUtils.strip(summaryElements.get(0).text())))
175-
.directors(StringUtils.join(directorList, ","))
176-
.genres(StringUtils.join(genreList, ConstantUtils.SEPARATOR))
177-
.casts(StringUtils.join(actorList, ","))
178-
.movieYear(movieYear.orElse(0))
172+
Film film = Film.builder()
173+
.summary(summary)
179174
.rating(rating.orElse(0d))
180175
.build();
176+
177+
Element infoElement = document.getElementById("info");
178+
if (Objects.nonNull(infoElement)) {
179+
Elements spanElements = infoElement.getElementsByTag("span");
180+
List<String> genreList = spanElements.stream()
181+
.filter(item -> "v:genre".equals(item.attr(PROPERTY)))
182+
.map(Element::text)
183+
.collect(Collectors.toList());
184+
genres = StringUtils.join(genreList, ConstantUtils.SEPARATOR);
185+
186+
Elements aElements = infoElement.getElementsByTag("a");
187+
List<String> directorList = aElements.stream()
188+
.filter(item -> "v:directedBy".equals(item.attr("rel")))
189+
.map(Element::text)
190+
.collect(Collectors.toList());
191+
192+
List<String> actorList = aElements.stream()
193+
.filter(item -> "v:starring".equals(item.attr("rel")))
194+
.map(Element::text)
195+
.limit(5)
196+
.collect(Collectors.toList());
197+
198+
Optional<Integer> movieYear = spanElements.stream()
199+
.filter(item -> "v:initialReleaseDate".equals(item.attr(PROPERTY)))
200+
.map(Element::text)
201+
.map(item -> Integer.parseInt(item.substring(0, 4)))
202+
.limit(1)
203+
.findFirst();
204+
205+
film.setGenres(genres);
206+
film.setDirectors(StringUtils.join(directorList, ConstantUtils.SEPARATOR));
207+
film.setCasts(StringUtils.join(actorList, ConstantUtils.SEPARATOR));
208+
film.setMovieYear(movieYear.orElse(0));
209+
}
210+
211+
return film;
181212
} catch (Exception e) {
182213
log.error("failed to get detail from url: {}", url, e);
183214
return null;

0 commit comments

Comments
 (0)