瀏覽代碼

주문완료 메일서비스 개발중

tsit14 4 年之前
父節點
當前提交
e41d33d53e

+ 35 - 0
src/main/java/com/style24/core/biz/service/TscMailService.java

@@ -14,6 +14,7 @@ import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.CustContactHst;
 import com.style24.persistence.domain.CustCoupon;
 import com.style24.persistence.domain.Customer;
+import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.Point;
 
 import lombok.extern.slf4j.Slf4j;
@@ -562,5 +563,39 @@ public class TscMailService {
 			// Do nothing
 		}
 	}
+	
+	/**
+	 * 주문 결제 완료 안내
+	 *
+	 * @param GagaMap
+	 * @param Integer
+	 * @author jsh77b
+	 * @since 2021. 06. 22
+	 */
+	@Transactional("shopTxnManager")
+	public void sendOrderComplete(GagaMap replaceInfo, Integer senderNo) {
+		
+		Order orderInfo = (Order)replaceInfo.get("orderInfo");
+
+		// 주문 결제 완료 메일 발송
+		netpathyMailSender.send(NetpathyMailSender.MailAnswerSq.ORDER_COMPLETE.value(), orderInfo.getOrdEmail(), replaceInfo);
+
+		try {
+			if (replaceInfo.getInt("custNo") > 0) {
+				// 고객접촉이력 정보
+				CustContactHst custContactHst = new CustContactHst();
+				custContactHst.setContactType(TscConstants.ContactType.CANCEL_INFO.value());				// 접촉유형:주문-취소안내(공통코드G054)
+				custContactHst.setContactMethod(TscConstants.ContactMethod.EMAIL.value());					// 접촉방법:알림톡+문자(공통코드G055)
+				custContactHst.setContactContents("주문-결제안내");
+				custContactHst.setReceiverNo(replaceInfo.getInt("custNo"));
+				custContactHst.setSenderNo(senderNo);
+				custContactHst.setRegNo(senderNo);
+				coreCustomerService.createCustomerContactHistory(custContactHst);
+			}
+		} catch (Exception e) {
+			log.error("error", e);
+			// Do nothing
+		}
+	}
 
 }

+ 147 - 0
src/main/java/com/style24/core/biz/service/TscOrderService.java

@@ -2036,6 +2036,153 @@ public class TscOrderService {
 		resultMap.set("goodsNm"				, goodsNm);				// 상품명
 		resultMap.set("goodsCnt"			, goodsCnt);			// 상품건수
 		
+		// 2021.06.23 주문완료 메일정보 추가
+		resultMap.set("ordNm"				, order.getOrdNm());			// 주문자명
+		resultMap.set("ordNo"				, order.getOrdNo());			// 주문번호
+		resultMap.set("ordDt"				, order.getOrdDt());			// 주문일자
+		resultMap.set("recipNm"				, order.getRecipNm());			// 받는사람
+		resultMap.set("recipPhnno"			, order.getRecipPhnno());		// 받는사람핸드폰번호
+		resultMap.set("recipZipcode"		, order.getRecipZipcode());		// 받는사람우편번호
+		resultMap.set("recipBaseAddr"		, order.getRecipBaseAddr());	// 받는사람기본주소
+		resultMap.set("recipDtlAddr"		, order.getRecipDtlAddr());		// 받는사람상세주소
+		resultMap.set("delvMemo"			, order.getDelvMemo());			// 받는사람배송메모
+		resultMap.set("pgGbNm"				, payType);						// 결제방법
+		
+		// 주문목록
+		StringBuffer orderListInfo = new StringBuffer();
+		orderListInfo.append("<table style=\"width:100%;margin:0;padding:0;font-size: 14px;\" cellspacing=\"0\" cellpadding=\"0\">");
+		orderListInfo.append("	<tbody>");
+		orderListInfo.append("		<tr>");
+		orderListInfo.append("			<td height=\"50px;\" style=\"height: 50px;\"></td>");
+		orderListInfo.append("		</tr>");
+		orderListInfo.append("		<tr>");
+		orderListInfo.append("			<th colspan=\"2\" style=\"text-align: left;font-size: 18px;color: #222222;\" align=\"left\">주문 상품 정보</th>");
+		orderListInfo.append("		</tr>");
+		orderListInfo.append("		<tr>");
+		orderListInfo.append("			<td height=\"30px;\" style=\"height: 30px;\"></td>");
+		orderListInfo.append("		</tr>");
+		orderListInfo.append("		<tr>");
+		orderListInfo.append("			<td>");
+		
+		// 배송단위 START
+		orderListInfo.append("				<table style=\"border: 1px; border-color: #dddddd; border-style: solid; box-sizing: border-box; width:100%;margin:0;padding:0\" cellspacing=\"0\" cellpadding=\"0\">");
+		orderListInfo.append("					<tbody>");
+		orderListInfo.append("						<tr>");
+		orderListInfo.append("							<td colspan=\"5\" height=\"20px;\" style=\"height: 20px;\"></td>");
+		orderListInfo.append("						</tr>");
+		orderListInfo.append("						<tr>");
+		orderListInfo.append("							<td width=\"40px;\"></td>");
+		orderListInfo.append("							<td colspan=\"3\" style=\"text-align: left;font-size: 18px;font-family:\"Apple SD Gothic Neo\",\"나눔고딕\",NanumGothic,\"맑은고딕\",Malgun Gothic, Helvetica, sans-serif;font-weight:600;color: #222222;\" align=\"left\">").append("STYLE24 총알배송").append("</td>");
+		orderListInfo.append("							<td width=\"40px;\"></td>");
+		orderListInfo.append("						</tr>");
+		orderListInfo.append("						<tr>");
+		orderListInfo.append("							<td colspan=\"5\" height=\"20px;\" style=\"height: 20px;border:0; border-bottom: 1px; border-color: #dddddd; border-style: solid; box-sizing: border-box;\"></td>");
+		orderListInfo.append("						</tr>");
+		orderListInfo.append("						<tr>");
+		orderListInfo.append("							<td colspan=\"5\" style=\"text-align: left;font-size: 18px;font-family:\"Apple SD Gothic Neo\",\"나눔고딕\",NanumGothic,\"맑은고딕\",Malgun Gothic, Helvetica, sans-serif;color: #222222;\">");
+		
+		// 상품단위 START
+		orderListInfo.append("								<table style=\"width:100%;height:100%;margin:0;padding:0;font-size: 14px;\" cellspacing=\"0\" cellpadding=\"0\">");
+		orderListInfo.append("									<tbody>");
+		orderListInfo.append("										<tr>");
+		orderListInfo.append("											<td height=\"30px;\" style=\"height: 30px;\"></td>");
+		orderListInfo.append("										</tr>");
+		orderListInfo.append("										<tr>");
+		orderListInfo.append("											<td width=\"40px;\" rowspan=\"10\"></td>");
+		orderListInfo.append("											<td width=\"100px;\" height=\"150px;\" rowspan=\"10\" valign=\"top\" style=\"margin:0;padding:0\">");
+		orderListInfo.append("												<a href=\"#none\" target=\"_blank\" style=\"margin:0;padding:0\">");
+		orderListInfo.append("													<span style=\"background: #f5f5f5;width: 100px;height: 150px;margin:0;padding:0\">");
+		orderListInfo.append("														<img src=\"").append("이미지경로").append("\" alt=\"이미지\" style=\"width: 100px;height: 150px;margin:0;padding:0\">");
+		orderListInfo.append("													</span>");
+		orderListInfo.append("												</a>");
+		orderListInfo.append("											</td>");
+		orderListInfo.append("											<td width=\"30px;\" rowspan=\"10\"></td>");
+		orderListInfo.append("											<td width=\"370px;\" height=\"10px;\"></td>");
+		orderListInfo.append("											<td width=\"40px;\" rowspan=\"10\"></td>");
+		orderListInfo.append("										</tr>");
+		orderListInfo.append("										<tr>");
+		orderListInfo.append("											<td style=\"font-family:\"Apple SD Gothic Neo\",verdana,Arial,\"나눔고딕\",NanumGothic,\"맑은고딕\",Malgun Gothic, Helvetica, sans-serif;\">").append("브랜드명");
+		orderListInfo.append("											</td>");
+		orderListInfo.append("										</tr>");
+		orderListInfo.append("										<tr>");
+		orderListInfo.append("											<td height=\"10px;\" style=\"height: 10px;\"></td>");
+		orderListInfo.append("										</tr>");
+		orderListInfo.append("										<tr>");
+		orderListInfo.append("											<td style=\"color: #222222;font-size: 16px;font-weight: bold;letter-spacing: -0.05em;\">");
+		orderListInfo.append("												<a href=\"").append("링크").append("\" target=\"_blank\" style=\"display: block; color: #222222; font-size: 16px; font-weight: bold; letter-spacing: -0.025em; text-decoration: none;\">");
+		orderListInfo.append("상품명");
+		orderListInfo.append("												</a>");
+		orderListInfo.append("											</td>");
+		orderListInfo.append("										</tr>");
+		orderListInfo.append("										<tr>");
+		orderListInfo.append("											<td height=\"10px;\" style=\"height: 10px;\"></td>");
+		orderListInfo.append("										</tr>");
+		orderListInfo.append("										<tr>");
+		orderListInfo.append("											<td>");
+		orderListInfo.append("												<p style=\"margin: 0; padding: 0; font-family:\"Apple SD Gothic Neo\",\"나눔고딕\",NanumGothic,\"맑은고딕\",Malgun Gothic, Helvetica, sans-serif;font-weight:200;color: #666666; line-height: 2;\">옵션 1</p>");
+		orderListInfo.append("												<p style=\"margin: 0; padding: 0; font-family:\"Apple SD Gothic Neo\",\"나눔고딕\",NanumGothic,\"맑은고딕\",Malgun Gothic, Helvetica, sans-serif;font-weight:200;color: #666666; line-height: 2;\">옵션 1</p>");
+		orderListInfo.append("												<p style=\"margin: 0; padding: 0; font-family:\"Apple SD Gothic Neo\",\"나눔고딕\",NanumGothic,\"맑은고딕\",Malgun Gothic, Helvetica, sans-serif;font-weight:200;color: #666666; line-height: 2;\">옵션 1</p>");
+		orderListInfo.append("											</td>");
+		orderListInfo.append("										</tr>");
+		orderListInfo.append("										<tr>");
+		orderListInfo.append("											<td height=\"5px;\" style=\"height: 5px;\"></td>");
+		orderListInfo.append("										</tr>");
+		orderListInfo.append("										<tr>");
+		orderListInfo.append("											<td height=\"10px;\" style=\"height: 10px;\"></td>");
+		orderListInfo.append("										</tr>");
+		orderListInfo.append("										<tr>");
+		orderListInfo.append("											<td>");
+		orderListInfo.append("												<span>").append("1").append("개</span>");
+		orderListInfo.append("												<span style=\"width: 12px;padding-left:12px;\"></span>");
+		orderListInfo.append("												<span style=\"display: inline-block; vertical-align: middle; width: 1px; height: 14px; background: #ddd;\"></span>");
+		orderListInfo.append("												<span style=\"width: 12px;padding-right:12px;\"></span>");
+		orderListInfo.append("												<span style=\"text-decoration: line-through;color: #888888;\"><span>").append("19,990").append("</span>원</span>");
+		orderListInfo.append("												<span style=\"font-weight: 500;\"><span>").append("19,990").append("</span>원</span>");
+		orderListInfo.append("											</td>");
+		orderListInfo.append("										</tr>");
+		orderListInfo.append("										<tr>");
+		orderListInfo.append("											<td height=\"10px;\" style=\"height: 10px;\"></td>");
+		orderListInfo.append("										</tr>");
+		orderListInfo.append("										<tr>");
+		orderListInfo.append("											<td height=\"20px;\" style=\"height: 20px;\"></td>");
+		orderListInfo.append("										</tr>");
+		orderListInfo.append("									</tbody>");
+		orderListInfo.append("								</table>");
+		// 상품 END
+		
+		
+		orderListInfo.append("							</td>");
+		orderListInfo.append("						</tr>");
+		orderListInfo.append("						<tr>");
+		orderListInfo.append("							<td height=\"30px;\" style=\"height: 30px;\"></td>");
+		orderListInfo.append("						</tr>");
+		orderListInfo.append("						<tr>");
+		orderListInfo.append("							<td width=\"30px;\"></td>");
+		orderListInfo.append("							<td colspan=\"3\" height=\"1\" style=\"border: 1px; border-top-color: #ddd; border-top-style: dashed;\"></td>");
+		orderListInfo.append("							<td width=\"30px;\"></td>");
+		orderListInfo.append("						</tr>");
+		orderListInfo.append("					</tbody>");
+		orderListInfo.append("				</table>");
+		// 배송단위 END
+		
+		
+		
+		orderListInfo.append("			</td>");
+		orderListInfo.append("		</tr>");
+		orderListInfo.append("    </tbody>");
+		orderListInfo.append("</table>");
+		
+		log.info("orderListInfo ::: {} ", orderListInfo.toString());
+
+		for (Order orderDetail : orderDetailList) {
+			
+		}
+		resultMap.set("orderListInfo"		, orderListInfo);				// 주문목록
+		
+		// 사은품목록
+		StringBuffer orderFreegiftInfo = new StringBuffer();
+		resultMap.set("orderFreegiftInfo"	, orderFreegiftInfo);			// 사은품목록
+
 		return resultMap;
 	}
 	

+ 111 - 42
src/main/java/com/style24/persistence/mybatis/shop/TscOrder.xml

@@ -3853,48 +3853,117 @@
 	<!-- 44. 주문상세 결제금액 목록 조회 -->
 	<select id="getOrderDetailOrdAmtList"  parameterType="Order" resultType="Order">
 		/* TscOrder.getOrderDetailOrdAmtList */
-		SELECT OD.GOODS_CD
-		     , OD.ORD_DTL_NO
-		     , OD.LIST_PRICE
-		     , OD.CURR_PRICE
-		     , SUM(ODI.OPT_ADD_PRICE) AS OPT_ADD_PRICE
-		     , OD.ORD_QTY
-		     , OD.CPN1_DC_AMT 
-		     , OD.TMTB1_DC_AMT 
-		     , OD.TMTB2_DC_AMT 
-		     , OD.GOODS_CPN_DC_AMT 
-		     , OD.CART_CPN_DC_AMT 
-		     , OD.PRE_PNT_DC_AMT 
-		     , OD.PNT_DC_AMT 
-		     , OD.GFCD_USE_AMT 
-		     , OD.SAVE_PNT_AMT 
-		     , OD.DELV_ADDR_SQ
-		     , OD.GIFT_PACK_YN
-		     , G1.GOODS_NM
-		FROM   TB_ORDER_DETAIL OD
-		INNER  JOIN TB_GOODS G1 
-		ON     OD.GOODS_CD = G1.GOODS_CD
-		INNER  JOIN TB_ORDER_DETAIL_ITEM ODI
-		ON     OD.ORD_NO = ODI.ORD_NO
-		AND    OD.ORD_DTL_NO = ODI.ORD_DTL_NO
-		WHERE  1=1
-		AND    OD.ORD_NO = #{ordNo}
-		GROUP  BY OD.GOODS_CD 
-		     , OD.ORD_DTL_NO 
-		     , OD.CURR_PRICE
-		     , OD.ORD_QTY
-		     , OD.CPN1_DC_AMT 
-		     , OD.TMTB1_DC_AMT 
-		     , OD.TMTB2_DC_AMT 
-		     , OD.GOODS_CPN_DC_AMT 
-		     , OD.CART_CPN_DC_AMT 
-		     , OD.PRE_PNT_DC_AMT 
-		     , OD.PNT_DC_AMT 
-		     , OD.GFCD_USE_AMT 
-		     , OD.SAVE_PNT_AMT 
-		     , OD.DELV_ADDR_SQ
-		     , OD.GIFT_PACK_YN
-		     , G1.GOODS_NM
+		SELECT A.ORD_DTL_NO
+		     , A.LIST_PRICE
+		     , A.CURR_PRICE
+		     , A.ORD_QTY
+		     , A.CPN1_DC_AMT 
+		     , A.TMTB1_DC_AMT 
+		     , A.TMTB2_DC_AMT 
+		     , A.GOODS_CPN_DC_AMT 
+		     , A.CART_CPN_DC_AMT 
+		     , A.PRE_PNT_DC_AMT 
+		     , A.PNT_DC_AMT 
+		     , A.GFCD_USE_AMT 
+		     , A.SAVE_PNT_AMT 
+		     , A.DELV_ADDR_SQ
+		     , A.GIFT_PACK_YN
+		     , A.GOODS_CD
+		     , A.GOODS_NM
+		     , A.BRAND_GROUP_NM
+		     , A.GOODS_TYPE
+		     , A.DELV_FEE_CD_GRP
+		     , A.DELV_FEE_CD_GRP_SORT
+		     , SUM(A.OPT_ADD_PRICE) AS OPT_ADD_PRICE
+		     , GROUP_CONCAT(A.ITEM_NM ORDER BY A.ORD_DTL_ITEM_SQ SEPARATOR '!@!') AS ITEM_NM
+		     , GROUP_CONCAT(A.ITEM_CD ORDER BY A.ORD_DTL_ITEM_SQ) AS ITEM_CD
+		     , GROUP_CONCAT(A.OPT_CD ORDER BY A.ORD_DTL_ITEM_SQ) AS OPT_CD
+		     , GROUP_CONCAT(A.OPT_CD1 ORDER BY A.ORD_DTL_ITEM_SQ) AS OPT_CD1
+		     , GROUP_CONCAT(A.OPT_CD2 ORDER BY A.ORD_DTL_ITEM_SQ) AS OPT_CD2
+		     , GROUP_CONCAT(A.ITEM_QTY ORDER BY A.ORD_DTL_ITEM_SQ) AS ITEM_QTYR
+		     , GROUP_CONCAT(A.COLOR_NM ORDER BY A.ORD_DTL_ITEM_SQ) AS COLOR_NM
+		FROM (
+		    SELECT G1.GOODS_CD
+		         , G1.GOODS_NM
+		         , (SELECT CASE WHEN BG.DISP_NM_LANG = 'EN'
+		                        THEN BG.BRAND_GROUP_ENM
+		                        ELSE BG.BRAND_GROUP_KNM
+		                        END  BRAND_GROUP_NM
+		            FROM   TB_BRAND BR
+		            INNER  JOIN TB_BRAND_GROUP BG
+		            ON     BR.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		            WHERE  1=1
+		            AND    BR.BRAND_CD = G1.BRAND_CD
+		            AND    BG.USE_YN = 'Y') AS BRAND_GROUP_NM
+		         , G1.GOODS_TYPE
+		         , CASE WHEN G1.GOODS_TYPE != 'G056_S' AND G1.SELF_GOODS_YN = 'Y'
+		                THEN (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G1.GOODS_CD AND COLOR_CD = ODI.OPT_CD1 AND DEFAULT_IMG_YN = 'Y')
+		                ELSE (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G1.GOODS_CD AND COLOR_CD = IFNULL(G1.MAIN_COLOR_CD,'XX') AND DEFAULT_IMG_YN = 'Y') END AS SYS_IMG_NM 
+		         , ODI.ORD_DTL_ITEM_SQ
+		         , G2.GOODS_NM AS ITEM_NM
+		         , IFNULL((SELECT COLOR_KNM FROM TB_COLOR C WHERE COLOR_CD = IFNULL(NULLIF(ODI.OPT_CD1,'') , G1.MAIN_COLOR_CD ) AND USE_YN  = 'Y'), ODI.OPT_CD1) AS COLOR_NM
+		         , ODI.ITEM_CD
+		         , ODI.ITEM_QTY
+		         , ODI.OPT_CD
+		         , ODI.OPT_CD1
+		         , ODI.OPT_CD2
+		         , CASE WHEN OD.SHOT_DELV_YN IN ('Y') AND G1.SELF_GOODS_YN IN ('Y') THEN 'SHOT'
+		                WHEN OD.SHOT_DELV_YN IN ('N') AND G1.SELF_GOODS_YN IN ('Y') THEN 'WMS'
+		                ELSE 'DELV'
+		                END  DELV_FEE_CD_GRP
+		         , CASE WHEN OD.SHOT_DELV_YN IN ('Y') AND G1.SELF_GOODS_YN IN ('Y') THEN 1
+		                WHEN OD.SHOT_DELV_YN IN ('N') AND G1.SELF_GOODS_YN IN ('Y') THEN 2
+		                ELSE 3
+		                END  DELV_FEE_CD_GRP_SORT
+		         , OD.ORD_DTL_NO
+		         , OD.LIST_PRICE
+		         , OD.CURR_PRICE
+		         , ODI.OPT_ADD_PRICE
+		         , OD.ORD_QTY
+		         , OD.CPN1_DC_AMT 
+		         , OD.TMTB1_DC_AMT 
+		         , OD.TMTB2_DC_AMT 
+		         , OD.GOODS_CPN_DC_AMT 
+		         , OD.CART_CPN_DC_AMT 
+		         , OD.PRE_PNT_DC_AMT 
+		         , OD.PNT_DC_AMT 
+		         , OD.GFCD_USE_AMT 
+		         , OD.SAVE_PNT_AMT 
+		         , OD.DELV_ADDR_SQ
+		         , OD.GIFT_PACK_YN
+		    FROM   TB_ORDER_DETAIL OD
+		    INNER  JOIN TB_GOODS G1 
+		    ON     OD.GOODS_CD = G1.GOODS_CD
+		    INNER  JOIN TB_ORDER_DETAIL_ITEM ODI
+		    ON     OD.ORD_NO = ODI.ORD_NO
+		    AND    OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+		    INNER  JOIN TB_GOODS G2
+		    ON     ODI.ITEM_CD = G2.GOODS_CD 
+		    WHERE  1=1
+		    AND    OD.ORD_NO = #{ordNo}
+		) A
+		GROUP  BY A.ORD_DTL_NO
+		     , A.LIST_PRICE
+		     , A.CURR_PRICE
+		     , A.ORD_QTY
+		     , A.CPN1_DC_AMT 
+		     , A.TMTB1_DC_AMT 
+		     , A.TMTB2_DC_AMT 
+		     , A.GOODS_CPN_DC_AMT 
+		     , A.CART_CPN_DC_AMT 
+		     , A.PRE_PNT_DC_AMT 
+		     , A.PNT_DC_AMT 
+		     , A.GFCD_USE_AMT 
+		     , A.SAVE_PNT_AMT 
+		     , A.DELV_ADDR_SQ
+		     , A.GIFT_PACK_YN
+		     , A.GOODS_CD
+		     , A.GOODS_NM
+		     , A.BRAND_GROUP_NM
+		     , A.GOODS_TYPE
+		     , A.DELV_FEE_CD_GRP
+		     , A.DELV_FEE_CD_GRP_SORT
+		ORDER  BY DELV_FEE_CD_GRP_SORT ASC
 	</select>
 
 	<!-- 마이페이지 주문 상태 별 수량 조회 -->