20220806 ~ 20220811
먼저, 공동구매 게시물 작성을 위한 쿼리문을 구성하였다.
--○ 공구 게시물 작성 프로시저
-- 작성자 결제 테이블 INSERT, 참여자 테이블 INSERT, BUYPOST INSERT
CREATE OR REPLACE PROCEDURE PRO_BUYPOST_INSERT
( V_TITLE IN BUYPOST.TITLE%TYPE
, V_GOODS_PHOTO_PATH IN BUYPOST.GOODS_PHOTO_PATH%TYPE
, V_URL IN BUYPOST.URL%TYPE
, V_CONTENT IN BUYPOST.CONTENT%TYPE
, V_EXPIRATION_DATETIME IN BUYPOST.EXPIRATION_DATETIME%TYPE
, V_TOTAL_PRICE IN BUYPOST.TOTAL_PRICE%TYPE
, V_GOODS_NUM IN BUYPOST.GOODS_NUM%TYPE
, V_DEADLINE IN BUYPOST.DEADLINE%TYPE
, V_TRADE_DATETIME IN BUYPOST.TRADE_DATETIME%TYPE
, V_MEMBER_CODE IN BUYPOST.MEMBER_CODE%TYPE
, V_SUB_CATE_CODE IN BUYPOST.SUB_CATE_CODE%TYPE
, V_BUY_NUMBER IN BUYPOST_PARTICIPANT.BUY_NUMBER%TYPE -- 작성자가 구매할 상품 개수
)
IS
I_PER_PRICE NUMBER; -- 개당 가격
I_WRITER_PRICE NUMBER; -- 작성자가 결제할 금액
I_BUYPOST_CODE VARCHAR2(10);
BEGIN
I_PER_PRICE := TRUNC(V_TOTAL_PRICE / V_GOODS_NUM); -- 소수점은 같이사자가 지원
I_WRITER_PRICE := I_PER_PRICE * V_BUY_NUMBER;
I_BUYPOST_CODE := 'BP'||BUYPOST_SEQ.NEXTVAL;
-- 공구 게시물 INSERT
INSERT INTO BUYPOST(CODE, TITLE, GOODS_PHOTO_PATH, URL, CONTENT, EXPIRATION_DATETIME
, TOTAL_PRICE, GOODS_NUM, DEADLINE, TRADE_DATETIME, WRITE_DATETIME
, MEMBER_CODE, SUB_CATE_CODE)
VALUES(I_BUYPOST_CODE, V_TITLE, V_GOODS_PHOTO_PATH, V_URL, V_CONTENT, V_EXPIRATION_DATETIME
, V_TOTAL_PRICE, V_GOODS_NUM, V_DEADLINE, V_TRADE_DATETIME, SYSDATE
, V_MEMBER_CODE, V_SUB_CATE_CODE);
-- 결제 INSERT
INSERT INTO PAYMENT
VALUES('P'||PAYMENT_SEQ.NEXTVAL, I_WRITER_PRICE, SYSDATE, I_BUYPOST_CODE, V_MEMBER_CODE);
-- 참여자 INSERT
INSERT INTO BUYPOST_PARTICIPANT
VALUES('BPPA'||BUYPOST_PARTICIPANT_SEQ.NEXTVAL, V_BUY_NUMBER, NULL, NULL, NULL, NULL, I_BUYPOST_CODE, V_MEMBER_CODE);
END;
작성자가 공동구매 게시물을 작성하면 순서대로
공동구매 게시물 INSERT - 결제 INSERT - 참여자 INSERT 순으로 INSERT 처리돼야 한다.
따라서 위와 같이 프로시저를 생성했다.
하 근데 mybatis 에서 프로시저 실행하는 부분이 빡셌다...
아니 실행은 그냥 따라하기만 하면 됐는데 name 태그에 빼 먹은 게 있어서 엄청 애를 먹었다. (2시간 정도 걸린 듯 ㅎㅎ)
<select id="insertBuypost" statementType="CALLABLE" parameterType="HashMap">
{ CALL PRO_BUYPOST_INSERT(
#{title,jdbcType=VARCHAR},
#{url,jdbcType=VARCHAR},
#{content,jdbcType=VARCHAR},
#{expiration_datetime,jdbcType=DATE},
#{total_price,jdbcType=NUMERIC},
#{goods_num,jdbcType=NUMERIC},
#{deadline,jdbcType=DATE},
#{trade_datetime,jdbcType=DATE},
#{member_code,jdbcType=VARCHAR},
#{sub_cate_code,jdbcType=VARCHAR},
#{buy_number,jdbcType=NUMERIC}
)
}
</select>
BuypostDAO.xml 에 이러한 코드를 추가하였다.
form 으로 값들이 넘어오지 않는 현상을 해결하고 member_code 가 넘어오지 않는 오류가 발생하였다.
로그인한 상태에서는 발생하지 않는데 로그아웃 상태일 때 처리를 따로 해주지 않아서 발생하는 오류였다.
따라서 header.jsp 에 코드를 추가하여 로그아웃 상태일 시, 먼저 로그인을 하라는 alert 창이 뜨게 하였다.
<script type="text/javascript">
function loginAlert()
{
Swal.fire({
title: '로그인',
text: '로그인 이후 이용 가능합니다.',
icon: 'warning',
iconColor: '#f27474',
confirmButtonText: '확인',
}).then((result) => {
location.href='loginform.lion';
})
}
</script>
추가한 코드는 위와 같다.
그런데 저번에 작성한 소분류 카테고리 코드 때문에 sub_cate_code 값이 넘어가지 않는 오류가 생겼다..............ㅠㅠ
많은 시도를 해봤지만 도저히 방법을 모르겠어서 미관을 포기하기로 했다...
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<select class="form-select subCategory-select"
aria-label="Default select example" name="sub_cate_code">
<option value="0" selected>소분류 선택</option>
<c:forEach var="subCate" items="${subList }">
<option value="${subCate.code }">${subCate.name }</option>
</c:forEach>
</select>
코드를 이렇게 수정하였다.
그럼 이렇게 안 예쁘게 뜨기는 ... 하지만 ^^ 게시물 등록은 잘 된다!
이제 마지막으로 datepicker 관련...이다... 마지막!!!!!!!!!!!!!!
원래 timepicker 도 해줘야 하지만 대충 datepicker 로 하는 법을 알아냈으니 나중에 여유로울 때 해봐야겠다.
우리 어플리케이션은 거래희망날짜가 모집마감날짜에 의존하므로 선택할 때 마다 선택 가능한 날짜가 바껴야 한다.
// 모집마감일 (현재 ~ +21일)
$("#deadline").datepicker({
minDate: 0,
maxDate: "+21D",
onClose: function(selectedDate)
{
$("#trade_date").datepicker( "option", "minDate", selectedDate);
var maxDate = new Date(selectedDate);
maxDate.setDate(maxDate.getDate() + 14);
$("#trade_date").datepicker( "option", "maxDate", maxDate);
}
});
따라서 datepicker 함수를 통해 모집마감일 datepicker 가 닫힐 때
거래희망일 datepicker 값이 설정되도록 하였다.
maxDate 라는 Date 변수를 하나 정의하고 그 값에 14일을 더하여 해당 변수를 거래희망일의 maxDate로 설정한다.
모집마감날짜를 9월 1일로 선택하였다면 거래희망일은 다음과 같이 해당 날짜 내에서만 선택 가능하다.
timepicker 도 건드려 보고 싶지만... 시간이 없는 insertForm 은 여기서 마무리 하려고 한다.
다음은 실제 결제 과정에 해당하는 포인트 결제 부분을 처리하고자 한다!
'공부 > Project' 카테고리의 다른 글
같이사자 :: 포인트 결제 쿼리문 오류 수정 (0) | 2022.08.18 |
---|---|
같이사자 :: 공동구매 게시물 등록 코드 완성(java 넘어온 객체 데이터 다시 넘겨주기) (0) | 2022.08.14 |
같이사자 :: 공동구매 게시물 등록 시 결제 페이지 코드 구성 (0) | 2022.08.12 |
같이사자 :: nice-selectbox 오류 - 해결 아닌 해결... (0) | 2022.08.04 |
같이사자 :: 공동구매 게시물 작성 코드 작성, selectbox option ajax 처리 오류 (0) | 2022.08.01 |