이호영 이호영 2025-07-18
친구톡 환불 완료
@936f413ac0aa74d397c335f611fef8cd4e67f681
 
src/main/java/itn/let/kakao/kakaoComm/BizKakaoPriceVO.java (added)
+++ src/main/java/itn/let/kakao/kakaoComm/BizKakaoPriceVO.java
@@ -0,0 +1,34 @@
+package itn.let.kakao.kakaoComm;
+
+import java.math.BigDecimal;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+
+/**
+ * @  BIZ_KAKAO_PRICE 테이블 관련  
+ */
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+public class BizKakaoPriceVO {
+
+	private Long bizKakaoPriceId;
+
+	private String bizKakaoAtPrice;         // 알림톡 단가
+	private String bizKakaoFtPrice;         // 친구톡 단가
+	private String bizKakaoFtImgPrice;      // 친구톡 이미지 단가
+	private String bizKakaoFtWideImgPrice;  // 친구톡 와이드 이미지 단가
+	private String bizSmsPrice;             // SMS 단가
+	private String bizMmsPrice;             // MMS 단가
+
+	private String msgGroupId;  // 메시지 그룹 ID
+
+
+	// getters and setters 생략
+}(No newline at end of file)
src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java
--- src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java
@@ -108,4 +108,9 @@
 	public void insertKakaoGroupDataTb_advc(KakaoSendAdvcVO sendVO) {
 		insert("kakaoAlimTalkDAO.insertKakaoGroupDataTb_advc", sendVO);
 	}
+
+	public KakaoVO selectBizLog(String bizUmid) {
+		return (KakaoVO) select("kakaoAlimTalkDAO.selectBizLog", bizUmid); 
+//		return (KakaoVO) select("kakaoAlimTalkDAO.selectKakaoAtUmid", bizUmid); 
+	}
 }
src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java
--- src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java
@@ -29,6 +29,7 @@
 import itn.com.cmm.LoginVO;
 import itn.com.cmm.MjonMsgSendVO;
 import itn.com.utl.fcc.service.EgovStringUtil;
+import itn.let.kakao.kakaoComm.BizKakaoPriceVO;
 import itn.let.kakao.kakaoComm.KakaoSendAdvcVO;
 import itn.let.kakao.kakaoComm.KakaoSendUtil;
 import itn.let.kakao.kakaoComm.KakaoVO;
@@ -45,6 +46,7 @@
 import itn.let.mjo.msgholiday.service.impl.MsgHolidayDAO;
 import itn.let.mjo.pay.service.MjonPayService;
 import itn.let.mjo.pay.service.MjonPayVO;
+import itn.let.mjo.pay.service.impl.MjonPayDAO;
 import itn.let.module.base.PriceAndPoint;
 import itn.let.sym.site.service.JoinSettingVO;
 import itn.let.sym.site.service.impl.SiteManagerDAO;
@@ -86,6 +88,9 @@
 	/** userManageService */
 	@Resource(name = "userManageService")
 	private EgovUserManageService userManageService;
+
+	@Autowired
+	private MjonPayDAO mjonPayDAO;
 	
 	@Autowired
 	KakaoSendUtil kakaoSendUtil;
@@ -95,6 +100,11 @@
 	
 	@Autowired
 	private PriceAndPoint priceAndPoint;
+
+	final String KAKAO_SUCCESS_CODE = "7000";
+	final String RESEND_YN_YES = "Y";
+	final String SMS_SUCCESS_CODE = "4100"; // SMS 성공 코드
+	final String MMS_SUCCESS_CODE = "6600"; // MMS 성공 코드
 	
 	//발신프로필 상태값 변경(삭제/복구 기능)
 	@Override
@@ -833,32 +843,98 @@
 		 */
 		List<KakaoVO> kakaoFtSentRefundList = kakaoAlimTalkDAO.selectKakaoFtSentRefundList();
 		
-		for(KakaoVO vo : kakaoFtSentRefundList) {
-			System.out.println(vo.getMsgGroupId() +"________결과 : " +vo.getRsltCode() +"     대체문자 전송 : "+vo.getSubMsgSendYn());
+		for(KakaoVO kakaoVO : kakaoFtSentRefundList) {
+			System.out.println(kakaoVO.getMsgGroupId() +"________결과 : " +kakaoVO.getRsltCode() +"     대체문자 전송 : "+kakaoVO.getSubMsgSendYn());
 			
-			if("7000".equals(vo.getRsltCode())) {//친구톡 발송 성공시
+			if(KAKAO_SUCCESS_CODE.equals(kakaoVO.getRsltCode())) {//친구톡 발송 성공시
 			
-				kakaoAlimTalkDAO.updateKakaoFtSend(vo);
+				processFtSendCharge(kakaoVO); 
 				
-			}else if("Y".equals(vo.getSubMsgSendYn())) {//친구톡 발송 실패 했을 경우
-				
-				//대체문자 발송 UMID 번호 조회 - 알림톡 쿼리 동일하게 사용
-				KakaoVO info = kakaoAlimTalkDAO.selectKakaoAtUmid(vo);
-				
-				System.out.println("대체문자 전송 : " + info.getBizUmid());
-				
-//				if (info.getBizUmid() != null) {//대체문자 발송 완료인 경우
-				if (StringUtils.isNotEmpty(info.getBizUmid())) {//대체문자 발송 완료인 경우
-					kakaoAlimTalkDAO.updateKakaoFtSubMsgSend(vo);
-				}else {
-					kakaoAlimTalkDAO.updateKakaoFtNotSend(vo);	 
-				}
+			}else if(RESEND_YN_YES.equals(kakaoVO.getSubMsgSendYn())) {
+				//친구톡 발송 실패 했고, 대체문자 발송 했을 경우
+				handleAlternativeMessageScenario(kakaoVO);
 				
 			}else {
-				kakaoAlimTalkDAO.updateKakaoFtNotSend(vo);
+				handleRefund(kakaoVO, "카카오 친구톡 전송 실패로 인한 결재 금액 환불");
 			}
 		}
 	}
+	
+
+	private void processFtSendCharge(KakaoVO kakaoVO) throws Exception {
+		
+
+		if(RESEND_YN_YES.equals(kakaoVO.getSubMsgSendYn())) {
+
+			BizKakaoPriceVO bizKakaoPriceVO = mjonPayDAO.selectBizKakaoPrice(kakaoVO.getMsgGroupId());
+			
+			BigDecimal sendPrice = null;
+			if(StringUtils.isEmpty(kakaoVO.getBizKakaoImageType())){
+				sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtPrice());
+			}else if("I".equals(kakaoVO.getBizKakaoImageType())){
+				sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtImgPrice());
+			}else if("W".equals(kakaoVO.getBizKakaoImageType())){
+				sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtWideImgPrice());
+			}
+
+			// 예시: 각 건당 가격이 이미 String 형태라면 변환
+			BigDecimal eachPrice = new BigDecimal(kakaoVO.getEachPrice());
+
+			// 차이 계산
+			BigDecimal diffPrice = eachPrice.subtract(sendPrice);
+			
+			
+			if (diffPrice.compareTo(BigDecimal.ZERO) > 0) {
+				String result = diffPrice.toString();
+				kakaoVO.setEachPrice(result);
+
+				handleRefund(kakaoVO, "카카오 친구톡 전송으로 인한 결재 차액 환불");
+			}
+			
+		}else {
+			mjonMsgDAO.updateRefundY(kakaoVO);
+			
+		}
+		// TODO Auto-generated method stub
+		
+	}
+
+	private void handleAlternativeMessageScenario(KakaoVO kakaoVO) throws Exception {
+		KakaoVO bizLogVO = kakaoAlimTalkDAO.selectBizLog(kakaoVO.getBizUmid());
+		log.info("대체문자 전송 UMID: {}", kakaoVO.getBizUmid());
+	
+		// 대체문자가 성공적으로 발송되었는지 확인 (SMS 또는 MMS 성공)
+		boolean isAlternativeMessageSuccessful = false;
+		if (bizLogVO != null && StringUtils.isNotEmpty(bizLogVO.getBizLogCallStatus())) {
+			if (SMS_SUCCESS_CODE.equals(bizLogVO.getBizLogCallStatus()) 
+					|| MMS_SUCCESS_CODE.equals(bizLogVO.getBizLogCallStatus())) {
+				isAlternativeMessageSuccessful = true;
+			}
+		}
+	
+		// 대체문자 성공이면 환불 완료처리면 한다.
+		if (isAlternativeMessageSuccessful) {
+			mjonMsgDAO.updateRefundY(kakaoVO);
+		} else {
+			// 대체문자 발송 실패 된 경우 (친구톡 비용 환불 필요)
+			handleRefund(kakaoVO, "카카오 친구톡 전송 실패로 인한 결재 금액 환불");
+		}
+	}
+	
+	private void handleRefund(KakaoVO vo, String msg) throws Exception {
+		// mj_cash 테이블에 환불 내역 추가 및 회원 금액 업데이트
+		// eachPrice는 환불될 금액이므로 양수여야 합니다.
+		priceAndPoint.insertCashAndPoint(
+			vo.getUserId(),
+			Float.parseFloat(vo.getEachPrice()), // 환불 금액은 양수
+			msg,
+			vo.getMsgGroupId(),
+			vo.getUserData()
+		);
+		
+		// 해당 row 환불 처리 (mj_msg_data.REFUND_YN = 'Y')
+		mjonMsgDAO.updateRefundY(vo);
+	}
 
 	@Override
 	public StatusResponse insertKakaoAtSandAjax_advc(KakaoVO kakaoVO, HttpServletRequest request) throws Exception {
src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java
--- src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java
+++ src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java
@@ -90,7 +90,7 @@
 	private String bizKakaoFtPrice;
 	private String bizSmsPrice;
 	private String bizMmsPrice;
-	
+
 	private int successCount;
 	private int waitCount;
 	private int failCount;
@@ -112,6 +112,7 @@
 	
 	private String successPrice;
 	private String kakaoResendSuccPrice;
+	private String bizKakaoImageType;
 	
 	private String divideYn;
 	
src/main/java/itn/let/mjo/msg/service/impl/MjonMsgDAO.java
--- src/main/java/itn/let/mjo/msg/service/impl/MjonMsgDAO.java
+++ src/main/java/itn/let/mjo/msg/service/impl/MjonMsgDAO.java
@@ -455,6 +455,11 @@
 		update("mjonMsgDAO.updateKakaoAtDelayCancelMsgDataFlag", mjonMsgVO);
 	}
 	
+	// mj_msg_data 테이블 지연 알림톡 취소 값 수정
+	public void updateRefundY(MjonMsgVO mjonMsgVO) {
+		update("mjonMsgDAO.updateRefundY", mjonMsgVO);
+	}
+	
 	// mj_msg_group_data 테이블 지연 알림톡 취소 값 수정
 	public void updateKakaoAtDelayCancelMsgGroupDataFlag(MjonMsgVO mjonMsgVO) {
 		update("mjonMsgDAO.updateKakaoAtDelayCancelMsgGroupDataFlag", mjonMsgVO);
src/main/java/itn/let/mjo/pay/service/MjonPayVO.java
--- src/main/java/itn/let/mjo/pay/service/MjonPayVO.java
+++ src/main/java/itn/let/mjo/pay/service/MjonPayVO.java
@@ -236,6 +236,8 @@
 
 	private int  remainPoint;
 	
+	private String  userData;
+	
 	
 	private String totChgPay;			// 간편결제분류
 	
src/main/java/itn/let/mjo/pay/service/impl/MjonPayDAO.java
--- src/main/java/itn/let/mjo/pay/service/impl/MjonPayDAO.java
+++ src/main/java/itn/let/mjo/pay/service/impl/MjonPayDAO.java
@@ -5,6 +5,7 @@
 import org.springframework.stereotype.Repository;
 
 import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
+import itn.let.kakao.kakaoComm.BizKakaoPriceVO;
 import itn.let.mjo.pay.service.MjonPayVO;
 import itn.let.mjo.pay.service.MjonVaMsgLogVO;
 import itn.let.mjo.pay.service.RefundVO;
@@ -45,6 +46,10 @@
 	public MjonPayVO selectCashVO(MjonPayVO mjonPayVO) throws Exception{
 		return (MjonPayVO)select("mjonPayDAO.selectCashVO", mjonPayVO);
 	}
+	
+	public BizKakaoPriceVO selectBizKakaoPrice(String msgGroupId) throws Exception{
+		return (BizKakaoPriceVO)select("mjonPayDAO.selectBizKakaoPrice", msgGroupId);
+	}
 
 	public void insertCash(MjonPayVO mjonPayVO) throws Exception{
 		
src/main/java/itn/let/module/base/PriceAndPoint.java
--- src/main/java/itn/let/module/base/PriceAndPoint.java
+++ src/main/java/itn/let/module/base/PriceAndPoint.java
@@ -5,9 +5,11 @@
 
 import javax.annotation.Resource;
 
+import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import egovframework.rte.fdl.cmmn.exception.FdlException;
 import egovframework.rte.fdl.idgnr.EgovIdGnrService;
 import itn.let.kakao.kakaoComm.KakaoSendAdvcVO;
 import itn.let.kakao.kakaoComm.KakaoSendUtil;
@@ -127,23 +129,69 @@
 					, String msgGroupId
 			) throws Exception {
  
-		MjonPayVO mjonPayVO = new MjonPayVO();
-		mjonPayVO.setCashId(idgenMjonCashId.getNextStringId());
-		mjonPayVO.setUserId(userId);
-		System.out.println(" + totPrice :: "+ totPrice);
-		mjonPayVO.setCash(totPrice);
-		mjonPayVO.setFrstRegisterId(userId);
-		mjonPayVO.setMemo(memo);
-		mjonPayVO.setMsgGroupId(msgGroupId);
+//		MjonPayVO mjonPayVO = new MjonPayVO();
+//		mjonPayVO.setCashId(idgenMjonCashId.getNextStringId());
+//		mjonPayVO.setUserId(userId);
+//		System.out.println(" + totPrice :: "+ totPrice);
+//		mjonPayVO.setCash(totPrice);
+//		mjonPayVO.setFrstRegisterId(userId);
+//		mjonPayVO.setMemo(memo);
+//		mjonPayVO.setMsgGroupId(msgGroupId);
  
+		insertCashAndPoint(userId, totPrice, memo, msgGroupId, null);
+		
+//		mjonPayDAO.insertCash(mjonPayVO); //캐시 
+//		mjonPayDAO.updateMemberCash(mjonPayVO); //회원정보 업데이트
+		
+	}
+	/**
+	 * @methodName	: insertCashAndPoint 
+	 * @author		: 이호영
+	 * @date		: 2025. 7. 17.
+	 * @description	: insertCashAndPoint 에서 환불으로 인해 userData 추가
+	 * @return : void
+	 * @param userId
+	 * @param totPrice
+	 * @param memo
+	 * @param msgGroupId
+	 * @param userData
+	 * @throws Exception
+	 * 
+	 */
+	public void insertCashAndPoint(
+			String userId
+			, float totPrice
+			, String memo
+			, String msgGroupId
+			, String userData
+			) throws Exception {
+		
+		MjonPayVO mjonPayVO = buildPayVO(userId, totPrice, memo, msgGroupId);
+
+//		 환불로 인해 userData가 추후 사용될 경우 여기에 처리
+		 if (StringUtils.isNotEmpty(userData)) { mjonPayVO.setOrderId(userData); }
+		
 		mjonPayDAO.insertCash(mjonPayVO); //캐시 
 		mjonPayDAO.updateMemberCash(mjonPayVO); //회원정보 업데이트
 		
+	}
+	
+	private MjonPayVO buildPayVO(String userId, float totPrice, String memo, String msgGroupId) throws FdlException {
+		MjonPayVO vo = new MjonPayVO();
+		vo.setCashId(idgenMjonCashId.getNextStringId());
+		vo.setUserId(userId);
+		vo.setCash(totPrice);
+		vo.setFrstRegisterId(userId);
+		vo.setMemo(memo);
+		vo.setMsgGroupId(msgGroupId);
+		System.out.println(" + totPrice :: " + totPrice);
+		return vo;
 	}
 
 	public void insertBizFtKakaoPrice(String userId, String msgGroupId) throws Exception {
 		KakaoVO kakaoVO = new KakaoVO();
 
+		System.out.println("=======================");
 		// 사용자 개인 단가 정보 불러오기
 		MberManageVO mberManageVO = mjonMsgDataDAO.selectMberManageInfo(userId);
 		// 시스템 기본 단가 정보 불러오기
src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml
--- src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml
@@ -1398,6 +1398,7 @@
 				       A.BIZ_KAKAO_RESEND_YN       AS bizKakaoResendYn,
 						A.BIZ_KAKAO_RESEND_DATA as bizKakaoResendData,
 						B.AD_FLAG  as adFlag ,
+						B.BIZ_KAKAO_IMAGE_TYPE  as bizKakaoImageType ,
 				       CASE
 				           WHEN B.AT_DELAY_YN = 'Y' AND B.AT_DELAY_COMPLETE_YN = 'N'
 				               THEN DATE_ADD(B.REQ_DATE, INTERVAL -30 MINUTE)
src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_AT_SQL_Mysql.xml
--- src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_AT_SQL_Mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_AT_SQL_Mysql.xml
@@ -186,6 +186,8 @@
 			MSG_GROUP_ID
 			, BIZ_KAKAO_AT_PRICE
 			, BIZ_KAKAO_FT_PRICE
+			, BIZ_KAKAO_FT_IMG_PRICE
+			, BIZ_KAKAO_FT_WIDE_IMG_PRICE
 			, BIZ_SMS_PRICE
 			, BIZ_MMS_PRICE
 			, BIZ_PICTURE_PRICE
@@ -195,6 +197,8 @@
 			#msgGroupId#
 			,#kakaoAtPrice#
 			,#kakaoFtPrice#
+			,#kakaoFtImgPrice#
+			,#kakaoFtWideImgPrice#
 			,#smsPrice#
 			,#mmsPrice#
 			,#picturePrice#
@@ -233,6 +237,7 @@
 			, MMD.MSG_GROUP_ID							AS msgGroupId
 			, MMD.MSG_SEQ								AS msgSeq
 			, MMGD.BIZ_KAKAO_IMAGE_TYPE 				AS bizKakaoImageType
+			, MMGD.EACH_PRICE			 				AS eachPrice
 			, MMD.USERDATA								AS userData
 			, MMD.REFUND_YN								AS refundYn
 			, MMD.RSLT_CODE								AS rsltCode
@@ -243,7 +248,7 @@
 			, MMD.BIZ_KAKAO_RESEND_YN					AS subMsgSendYn
 			, MMD.BIZ_KAKAO_RESEND_TYPE					AS subMsgType
 			, MMD.FILE_CNT 								AS fileCnt
-			, MMD.BIZ_KAKAO_RESEND_TYPE  				AS bizKakaoResendType
+			, MMD.BIZ_UMID								AS bizUmid
 		FROM
 			MJ_MSG_DATA MMD
 			INNER JOIN LETTNGNRLMBER MB
@@ -266,6 +271,15 @@
 			AND USERDATA = #userData#
 	</select>
 	
+	<select id="kakaoAlimTalkDAO.selectBizLog" resultClass="kakaoVO" parameterClass="String">
+		SELECT
+			CALL_STATUS AS bizLogCallStatus
+		FROM
+			BIZ_LOG
+		WHERE 1=1
+			AND UMID = #umid#
+	</select>
+	
 	<!-- 카카오 전송 환불 프로시저 실행 (카카오 전송 성공 관련) -->
 	<procedure id="kakaoAlimTalkDAO.updateKakaoAtSend" parameterClass="kakaoVO">
 		{call kakaoAt_Send(#userId#, #msgGroupId#, #userData#)}
src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
--- src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
@@ -7435,6 +7435,17 @@
 	
 	</update>
 	
+	<update id="mjonMsgDAO.updateRefundY" parameterClass="mjonMsgVO">
+		
+			UPDATE MJ_MSG_DATA
+				SET	REFUND_YN = 'Y'
+			WHERE
+				USER_ID				=	#userId#
+				AND USERDATA		=	#userData#
+				AND MSG_GROUP_ID	=	#msgGroupId#	
+	
+	</update>
+	
 	<update id="mjonMsgDAO.updateKakaoAtDelayCancelMsgGroupDataFlag" parameterClass="mjonMsgVO">
 		
 		UPDATE
src/main/resources/egovframework/sqlmap/let/pay/MjonPay_SQL_mysql.xml
--- src/main/resources/egovframework/sqlmap/let/pay/MjonPay_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/pay/MjonPay_SQL_mysql.xml
@@ -3,10 +3,11 @@
   =========     =======    =================================================
   2021.03.01    신명섭 	
 -->
-<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
+<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
 <sqlMap namespace="Pay">
 	<typeAlias  alias="mjonPayVO" type="itn.let.mjo.pay.service.MjonPayVO"/>
 	<typeAlias  alias="stVcVO" type="itn.let.mjo.pay.service.StVcVO"/>
+	<typeAlias  alias="bizKakaoPriceVO" type="itn.let.kakao.kakaoComm.BizKakaoPriceVO"/>
 	<typeAlias  alias="mjonVaMsgLogVO" type="itn.let.mjo.pay.service.MjonVaMsgLogVO"/>
 	
 	<!-- 공통 쿼리 부분 문자 발송 관련 -->
@@ -606,6 +607,7 @@
            MEMO,
            ORDER_ID,
            MSG_GROUP_ID
+           
        	)VALUES
        	(
            #userId#,
@@ -624,6 +626,22 @@
 	</update>
 	
 	
+	
+	<select id="mjonPayDAO.selectBizKakaoPrice" resultClass="bizKakaoPriceVO" parameterClass="String">
+			SELECT
+				BIZ_KAKAO_PRICE_ID          AS bizKakaoPriceId,
+				BIZ_KAKAO_AT_PRICE          AS bizKakaoAtPrice,
+				BIZ_KAKAO_FT_PRICE          AS bizKakaoFtPrice,
+				BIZ_KAKAO_FT_IMG_PRICE      AS bizKakaoFtImgPrice,
+				BIZ_KAKAO_FT_WIDE_IMG_PRICE AS bizKakaoFtWideImgPrice,
+				BIZ_SMS_PRICE               AS bizSmsPrice,
+				BIZ_MMS_PRICE               AS bizMmsPrice,
+				MSG_GROUP_ID                AS msgGroupId
+			FROM BIZ_KAKAO_PRICE
+			WHERE MSG_GROUP_ID = #msgGroupId#
+	</select>
+	
+	
 	<insert id="mjonPayDAO.insertMjPg" parameterClass="mjonPayVO">
 		INSERT INTO MJ_PG
        (
src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataView.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataView.jsp
@@ -1407,9 +1407,10 @@
 	$('#msgLeng').html("");
 	$('#limitLeng').html("");
 	
-	if ($("#ad_Y").is(":checked")) {
+	/* if ($("#ad_Y").is(":checked")) {
 		contents = "(광고)"+contents+"\n무료거부 0808800858"
-	}
+	} */
+	contents = adYChkAndMakeContents(contents);
 	console.log(contents);
 	var conLeng = conByteLeng(contents); // 내용 문자 입력 바이트 수 계산하기
 	
@@ -1444,6 +1445,7 @@
 		$("#subMsgType").val("SMS");
 		
 	}
+	totalFtPriceSum(tableL.getRows().length);
 		
 }
 
src/main/webapp/js/kakao/ft/ftPriceClclt.js
--- src/main/webapp/js/kakao/ft/ftPriceClclt.js
+++ src/main/webapp/js/kakao/ft/ftPriceClclt.js
@@ -49,7 +49,10 @@
 	if ($("#send_fail_check").is(":checked")) {
 		if (imgTypeId === "img_file_0") {
 			// 장문/단문 여부에 따라 가격 비교 후 더 큰 값으로 설정
-			var len = conByteLeng($('#smsTxtArea').val());
+
+			var contents = adYChkAndMakeContents($('#smsTxtArea').val());
+			
+			var len = conByteLeng(contents);
 			var long = parseFloat($("#longPrice").val());
 			var short = parseFloat($("#shortPrice").val());
 			price = Math.max(price, len > 90 ? long : short);
@@ -76,7 +79,12 @@
 	return totalStr; // 계산된 총 금액 반환
 }
 
-
+function adYChkAndMakeContents(contents){
+	if ($("#ad_Y").is(":checked")) {
+		contents = "(광고)"+contents+"\n무료거부 0808800858"
+	}
+	return contents;
+}
 
 
 /*
Add a comment
List