공부/Project

같이사자 :: 공동구매 게시물 작성 코드 구성 (mybatis 프로시저 실행, datepicker 다른 datepicker에 의존 시)

린구 2022. 8. 11. 17:44
반응형

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 은 여기서 마무리 하려고 한다.

다음은 실제 결제 과정에 해당하는 포인트 결제 부분을 처리하고자 한다!

 

반응형