
PoinController
@RequestMapping(value = "/pointList.do", method = RequestMethod.GET)
public String pointList(HttpSession session, Model model) {
// 세션에서 MemberDomain 객체를 가져옴
MemberDomain member = (MemberDomain) session.getAttribute("member");
if (member != null) {
// 객체에서 memberId 추출
String memberId = member.getMemberId();
PointDomain point = pointService.getPointByMemberId(memberId);
List<PointDomain> plusHistory = pointService.getPointPlusHistory(memberId);
List<PointDomain> minusHistory = pointService.getPointMinusHistory(memberId);
List<PointDomain> reviewPoint = pointService.getSelectPointReview(memberId);
List<PointDomain> newGood = pointService.getNewMembergood(memberId);
// 통합 리스트
List<PointDomain> totalHistory = new ArrayList<>();
// plus 내역 > 공통 필드에 매핑
for (PointDomain pd : plusHistory) {
pd.setHistoryDate(pd.getOrderJoinDate());
pd.setHistoryType("[구매확정]");
pd.setHistoryContent(pd.getProductName());
pd.setPointChange("+" + pd.getProductPoint() + " P");
totalHistory.add(pd);
}
// minus 내역 > 공통 필드에 매핑
for (PointDomain pd : minusHistory) {
pd.setHistoryDate(pd.getOrderDate());
pd.setHistoryType("[포인트 사용]");
pd.setHistoryContent(pd.getProductName());
pd.setPointChange("-" + pd.getProductPoint() + " P");
totalHistory.add(pd);
}
// 리뷰 작성 내역 > 공통 필드에 매핑
for (PointDomain pd : reviewPoint) {
pd.setHistoryDate(pd.getReviewUpdated());
pd.setHistoryType("[리뷰작성]");
// 리뷰 내용이 10자 이상이면 자르고 '...'
String contents = pd.getReviewContents();
if (contents == null) { // null 체크
contents = ""; // 리뷰 작성시 리뷰내용 없으면 공백처리
} else if (contents.length() > 20) {
contents = contents.substring(0, 20) + "...";
}
pd.setHistoryContent(contents);
pd.setPointChange("+150 P");
totalHistory.add(pd);
}
// 회원가입 내역 > 공통 필드에 매핑
for (PointDomain pd : newGood) {
pd.setHistoryDate(pd.getMemberJoindate());
pd.setHistoryType("[회원가입]");
pd.setHistoryContent("회원가입");
pd.setPointChange("+1000 P");
totalHistory.add(pd);
}
// totalHistory를 historyDate 기준으로 내림차순 정렬
Collections.sort(totalHistory, new Comparator<PointDomain>() {
@Override
public int compare(PointDomain o1, PointDomain o2) {
// 날짜가 null일 가능성이 없다면 바로 compareTo
return o2.getHistoryDate().compareTo(o1.getHistoryDate());
// 최신 날짜가 먼저 오도록 내림차순
}
});
model.addAttribute("point", point);
model.addAttribute("plusHistory", plusHistory);
model.addAttribute("minusHistory", minusHistory);
model.addAttribute("reviewPoint", reviewPoint);
model.addAttribute("newGood", newGood);
model.addAttribute("totalHistory", totalHistory); // 통합 리스트
} else {
return "redirect:/member/loginForm.do";
}
return "/mypage/point/pointList";
}
PointService
// 로그인 조회
@Override
public PointDomain getPointByMemberId(String memberId) {
return pointDAO.selectPointByMemberId(memberId);
}
// 구매내역 +
@Override
public List<PointDomain> getPointPlusHistory(String memberId) {
return pointDAO.selectPointPlusHistory(memberId);
}
// 포인트 -
@Override
public List<PointDomain> getPointMinusHistory(String memberId) {
return pointDAO.selectPointMinusHistory(memberId);
}
// 리뷰 작성시 +150P
@Override
public List<PointDomain> getSelectPointReview(String memberId) {
return pointDAO.selectPointReview(memberId);
}
// 회원가입 +1000P
@Override
public List<PointDomain> getNewMembergood(String memberId) {
return pointDAO.newMembergood(memberId);
}
PointDAO , point.xml