Newer
Older
package com.nju.svcrecommend.serviceImp;
import com.nju.svcrecommend.dataMapper.acm.ACMSLRMapper;
import com.nju.svcrecommend.dataMapper.ieee.IEEESLRMapper;
import com.nju.svcrecommend.domain.PaperVO;
import com.nju.svcrecommend.domain.ResponseVO;
import com.nju.svcrecommend.domain.SLRVO;
import com.nju.svcrecommend.service.SLRSvc;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
@Service
public class SLRSvcImp implements SLRSvc {
private final ACMSLRMapper acmslrMapper;
private final IEEESLRMapper ieeeslrMapper;
public SLRSvcImp(ACMSLRMapper acmslrMapper, IEEESLRMapper ieeeslrMapper) {
this.acmslrMapper = acmslrMapper;
this.ieeeslrMapper = ieeeslrMapper;
}
@Override
public ResponseVO getSLRRecommend(String keywords, int page, int pageSize, int sortBy, int startTime, int endTime) {
String[] k = keywords.split(";");
ArrayList<PaperVO> paperVOS = new ArrayList<>();
for(String keyword: k){
paperVOS.addAll(acmslrMapper.selectPaperVOsByKeyword("%"+keyword+"%", startTime, endTime));
paperVOS.addAll(ieeeslrMapper.selectPaperVOsByKeyword("%"+keyword+"%", startTime, endTime));
}
if(paperVOS.size() == 0) {return ResponseVO.buildFailure("No result.");}
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
PaperVO[] paperVOSArray = (PaperVO[])paperVOS.toArray(new PaperVO[paperVOS.size()]);
if (sortBy == 0) {
Arrays.sort(paperVOSArray, new YearCmp());
}
else {
Arrays.sort(paperVOSArray, new CitationsCmp());
}
ArrayList<PaperVO> documents = new ArrayList<>();
//0 1 2 3 4 5 6 7 8
for (int i = (page-1)*pageSize; i < page*pageSize; ++i){
PaperVO paperVO = paperVOSArray[i];
if (paperVO.getPublication() == null) {
paperVO.setPublication("");
}
paperVO.setAuthors(paperVO.getDb().equals("ACM") ? acmslrMapper.selectAuthorsByDocId(paperVO.getDocId())
: ieeeslrMapper.selectAuthorsByDocId(paperVO.getDocId()));
if (paperVO.getDb().equals("ACM")){
paperVO.setKeywords(acmslrMapper.selectKeywordsByDocId(paperVO.getDocId()));
}
documents.add(paperVO);
}
SLRVO slrvo = new SLRVO(documents, paperVOS.size());
return ResponseVO.buildSuccess(slrvo);
}
}
class CitationsCmp implements Comparator {
public int compare(Object arg0, Object arg1) {
PaperVO paperVO1 = (PaperVO)arg0;
PaperVO paperVO2 = (PaperVO)arg1;
if (paperVO1.getCitations() == paperVO2.getCitations()) {
return 0;
}
return paperVO1.getCitations() > paperVO2.getCitations() ? -1:1;
}
}
class YearCmp implements Comparator {
public int compare(Object arg0, Object arg1) {
PaperVO paperVO1 = (PaperVO)arg0;
PaperVO paperVO2 = (PaperVO)arg1;
if (paperVO1.getYear() == paperVO2.getYear()) {
return 0;
}
return paperVO1.getYear() > paperVO2.getYear() ? -1:1;
}
}