이번에는 포인트 결제 페이지 부분에 관한 코드를 작성하고자 한다.
<form id="buypostInsertForm" action="<%=cp %>/buypostinsertpay.lion" target="pay" method="post" onsubmit="window.open('<%=cp %>/buypostinsertpay.lion'
, 'pay', 'width=505, height=550, resizeable');">
먼저 저번에 넘겨주었던 form 의 action 주소를 pay popup 페이지로 변경해주었다.
기존에는 바로 게시물이 등록되는 프로세스였지만 게시물 등록이 잘 되는 것을 확인했으니
이제는 포인트 결제 과정을 추가해야 한다.
먼저 사용자의 포인트를 조회할 수 있는 쿼리문을 구성한 후, MemberDAO.xml 에 메소드를 추가하였다.
--○ 사용자별 포인트 금액 SELECT
-- 충전 VIEW
CREATE OR REPLACE VIEW VIEW_CHARGE
AS
SELECT SUM(C.AMOUNT) AS AMOUNT, A.MEMBER_CODE
FROM CHARGE C INNER JOIN ACCOUNT A
ON C.ACCOUNT_CODE = A.CODE
GROUP BY A.MEMBER_CODE;
-- 인출 VIEW
CREATE OR REPLACE VIEW VIEW_WITHDRAWAL
AS
SELECT SUM(W.AMOUNT) AS AMOUNT, A.MEMBER_CODE
FROM WITHDRAWAL W INNER JOIN ACCOUNT A
ON W.ACCOUNT_CODE = A.CODE
GROUP BY A.MEMBER_CODE;
-- 결제 VIEW
CREATE OR REPLACE VIEW VIEW_PAYMENT
AS
SELECT SUM(AMOUNT) AS AMOUNT, MEMBER_CODE
FROM PAYMENT
GROUP BY MEMBER_CODE;
-- 지급 VIEW
CREATE OR REPLACE VIEW VIEW_COMPLETE
AS
SELECT SUM(C.AMOUNT) AS AMOUNT, B.MEMBER_CODE
FROM COMPLETE C INNER JOIN BUYPOST B
ON C.BUYPOST_CODE = B.CODE
GROUP BY B.MEMBER_CODE;
-- 환불 VIEW
CREATE OR REPLACE VIEW VIEW_REFUND
AS
SELECT SUM(R.AMOUNT) AS AMOUNT, P.MEMBER_CODE
FROM REFUND R INNER JOIN PAYMENT P
ON R.PAYMENT_CODE = P.CODE
GROUP BY P.MEMBER_CODE;
-- 총 합계 VIEW
CREATE OR REPLACE VIEW VIEW_POINT
AS
SELECT M.CODE, (NVL(R.AMOUNT, 0) + NVL(C.AMOUNT, 0) - NVL(P.AMOUNT, 0) - NVL(W.AMOUNT, 0) + NVL(CH.AMOUNT, 0)) AS POINT
FROM MEMBER M FULL OUTER JOIN VIEW_REFUND R
ON M.CODE = R.MEMBER_CODE
FULL OUTER JOIN VIEW_COMPLETE C
ON R.MEMBER_CODE = C.MEMBER_CODE
FULL OUTER JOIN VIEW_PAYMENT P
ON C.MEMBER_CODE = P.MEMBER_CODE
FULL OUTER JOIN VIEW_WITHDRAWAL W
ON P.MEMBER_CODE = W.MEMBER_CODE
FULL OUTER JOIN VIEW_CHARGE CH
ON W.MEMBER_CODE = CH.MEMBER_CODE
WHERE M.CODE IS NOT NULL;
view 를 만들어 사용자의 잔여 포인트를 조회한다.
<select id="checkPoint" resultType="java.lang.Integer">
SELECT POINT
FROM VIEW_POINT
WHERE CODE = #{member_code}
</select>
// 공동구매 게시물 작성 시 포인트 결제
@RequestMapping(value="/buypostinsertpay.lion")
public String payPoint(BuypostDTO buypost, HttpServletRequest request, Model model)
{
IMemberDAO member = sqlSession.getMapper(IMemberDAO.class);
// 로그인 정보 얻어오기
HttpSession session = request.getSession();
// 포인트 조회
int point = member.checkPoint((String)session.getAttribute("member_code"));
System.out.println(buypost.getTotal_price());
System.out.println(buypost.getGoods_num());
System.out.println(buypost.getPerson_price());
// 1인당 가격 계산
int total_price = Integer.parseInt(buypost.getTotal_price());
int goods_num = Integer.parseInt(buypost.getGoods_num());
int person_price = total_price / goods_num; // 어차피 int 로 하면 절삭
buypost.setPerson_price(Integer.toString(person_price));
// 결제금액
int price = Integer.parseInt(buypost.getBuy_number()) * Integer.parseInt(buypost.getPerson_price());
model.addAttribute("state", "host");
model.addAttribute("point", point);
model.addAttribute("price", price);
model.addAttribute("buypost", buypost);
return "/WEB-INF/view/user/user_buypost_pay_popup.jsp";
}
다음으로 BuypostController.java 파일에 공동구매 게시물 작성 시 결제 페이지에 맵핑해주는 메소드를 생성하였다.
넘겨주는 네 개의 데이터는 다음과 같다.
먼저 state 라는 객체는 사용자가 현재 게시물을 작성하는 상태인지, 혹은 다른 사람이 진행하는 공동구매에 참여하려는 상태인지 구분하기 위해 넘겨주고 있다. 현재는 공동구매 게시물을 작성중이므로 host (진행자) 값을 넘겨주었다.
point 는 현재 사용자의 잔여 포인트를, price 는 결제하려는 금액을, buypost 는 기존의 form 에서 넘어온 buypost 객체를 그대로 넘겨준다. 그래야 실제로 공동구매 게시물을 insert 할 수 있으므로 ! (전의 게시물의 과정을 다시 연결해주어야 함)
<c:choose>
<%-- buyPostInsertForm 인 경우 --%>
<c:when test="${state == 'host' }">
<h2 class="hostMsg">공동구매 진행 결제창</h2>
</c:when>
<%-- buyPostArticle 인 경우 --%>
<c:otherwise>
<h2 class="participantMsg">공동구매 참여 결제창</h2>
</c:otherwise>
</c:choose>
결제 팝업 페이지(jsp 파일)는 참여자가 결제할 때 재사용하므로
받아온 state 의 값을 통해 진행자일 때와 참여자일 때로 분기해주었다.
또한 받아온 값들을 알맞게 넣어주면 다음과 같은 페이지가 완성된닷!
포인트가 부족할 때에는 충전 버튼이 활성화 되고, 충분하다면 결제하기 버튼이 활성화 된다.
결제창 구성은 이미 jsp 파일이 일부 구성돼있어 순조롭게 완료할 수 있었다.
다음은 실제 결제 코드를 구성하고자 한다.. 귀찮다 ㅎ 그래도 재밌당 화이팅!
'공부 > Project' 카테고리의 다른 글
같이사자 :: 포인트 결제 쿼리문 오류 수정 (0) | 2022.08.18 |
---|---|
같이사자 :: 공동구매 게시물 등록 코드 완성(java 넘어온 객체 데이터 다시 넘겨주기) (0) | 2022.08.14 |
같이사자 :: 공동구매 게시물 작성 코드 구성 (mybatis 프로시저 실행, datepicker 다른 datepicker에 의존 시) (0) | 2022.08.11 |
같이사자 :: nice-selectbox 오류 - 해결 아닌 해결... (0) | 2022.08.04 |
같이사자 :: 공동구매 게시물 작성 코드 작성, selectbox option ajax 처리 오류 (0) | 2022.08.01 |