Quellcode durchsuchen

Merge remote-tracking branch '112.172.147.34/style' into ST24PRJ-659(휴대폰-취소시-계좌번호-입력화면-오류-문의)

jsh77b vor 4 Jahren
Ursprung
Commit
9fe8e57a14

+ 31 - 3
src/main/java/com/style24/admin/biz/dao/TsaReviewDao.java

@@ -60,7 +60,34 @@ public interface TsaReviewDao {
 	void updateReviewUserReply(Review review);
 
 	/**
-	 * 동영상상품평포인트 생성
+	 * 상품평구분 조회 (T:텍스트상품평, I:포토상품평, V:동영상상품평, IV:포토+동영상상품평)
+	 * @param review - 상품평 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 12. 20
+	 */
+	String getReviewGb(Review review);
+	
+	/**
+	 * 상품평포인트 월지급횟수 조회
+	 * @param review - 상품평 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 12. 20
+	 */
+	int getReviewPointGiveMonthCount(Review review);
+	
+	/**
+	 * 상품평포인트 동일상품지급횟수 조회
+	 * @param review - 상품평 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 12. 20
+	 */
+	int getReviewPointGiveCount(Review review);
+	
+	/**
+	 * 동영상상품평포인트 생성(동영상만 등록한 경우 처리)
 	 * @param review - 상품평 정보
 	 * @author gagamel
 	 * @since 2021. 5. 17
@@ -68,7 +95,7 @@ public interface TsaReviewDao {
 	void createVideoReviewPoint(Review review);
 
 	/**
-	 * 동영상상품평포인트이력 생성
+	 * 동영상상품평포인트이력 생성(동영상만 등록한 경우 처리)
 	 * @param review - 상품평 정보
 	 * @author gagamel
 	 * @since 2021. 5. 17
@@ -78,10 +105,11 @@ public interface TsaReviewDao {
 	/**
 	 * 상품평 동영상 노출 처리
 	 * @param review - 상품평 정보
+	 * @return 처리건수
 	 * @author gagamel
 	 * @since 2021. 4. 22
 	 */
-	void updateVideoReviewDisplay(Review review);
+	int updateVideoReviewDisplay(Review review);
 
 	/**
 	 * 베스트상품평포인트 생성

+ 54 - 25
src/main/java/com/style24/admin/biz/service/TsaReviewService.java

@@ -88,34 +88,63 @@ public class TsaReviewService {
 	 */
 	@Transactional("shopTxnManager")
 	public void updateVideoReviewDisplay(Review review) {
-		// 포인트 처리
-		// 동영상(=포토)상품평포인트금액
-		int pntAmt = envsetService.getPhotoReviewPoint(TscConstants.Site.STYLE24.value());
-		review.setGvPntAmt(pntAmt);
-		review.setRmPntAmt(pntAmt);
+		review.setPntGiveStat("G043_30"); // 포인트지급반영
 		review.setRegNo(TsaSession.getInfo().getUserNo());
 		review.setUpdNo(TsaSession.getInfo().getUserNo());
-
-		// 동영상상품평포인트 생성
-		reviewDao.createVideoReviewPoint(review);
-
-		// 고객포인트일련번호 설정
-		Integer custPntSq = review.getCustPntSq();
-		if (review.getCustPntSq() == null) {
-			review.setCustPntSq(custPntSq);
+		
+		// 상품평포인트 월지급횟수 조회
+		int monthCnt = reviewDao.getReviewPointGiveMonthCount(review);
+		if (monthCnt >= 10) {
+			review.setPntGiveStat("G043_50"); // 당월지급횟수(10)초과
+		}
+		
+		// 상품평포인트 동일상품지급횟수 조회
+		int goodsCnt = reviewDao.getReviewPointGiveCount(review);
+		if (goodsCnt >= 1) {
+			review.setPntGiveStat("G043_60"); // 동일상품기지급
+		}
+		
+		// 상품평구분 조회 (T:텍스트상품평, I:포토상품평, V:동영상상품평, IV:포토+동영상상품평)
+		String reviewGb = reviewDao.getReviewGb(review);
+		
+		// 동영상상품평만 등록한 경우는 BOS에서 상품평 노출 시 포인트 지급
+		if ("V".equals(reviewGb)) {
+			// 상품평포인트 월지급횟수(10회) 이내이고 동일상품지급횟수(1회) 이내이면
+			if (monthCnt < 10 && goodsCnt < 1) {
+				// 동영상(=포토)상품평포인트금액
+				int pntAmt = envsetService.getPhotoReviewPoint(TscConstants.Site.STYLE24.value());
+				
+				review.setGvPntAmt(pntAmt);
+				review.setRmPntAmt(pntAmt);
+				
+				// 동영상상품평포인트 생성(동영상만 등록한 경우 처리)
+				reviewDao.createVideoReviewPoint(review);
+		
+				// 고객포인트일련번호 설정
+				Integer custPntSq = review.getCustPntSq();
+				if (review.getCustPntSq() == null) {
+					review.setCustPntSq(custPntSq);
+				}
+		
+				review.setOccurGb(TscConstants.PointOccurGb.REVIEW_POINT.value());
+				review.setOccurDtlDesc("동영상상품평포인트 지급");
+				review.setPntAmt(pntAmt);
+				review.setPntUploadStat(TscConstants.PntUploadStat.APPLY_COMPLETE.value());
+		
+				// 동영상상품평포인트이력 생성(동영상만 등록한 경우 처리)
+				reviewDao.createBestReviewPointHistory(review);
+			}
+		}
+		
+		// 동영상 상품평과 포토+동영상 상품평을 등록한 경우
+		if ("V".equals(reviewGb) || "IV".equals(reviewGb)) {
+			// 동영상상품평 노출 처리
+			review.setConfirmUno(TsaSession.getInfo().getUserNo());
+			int resultCnt = reviewDao.updateVideoReviewDisplay(review);
+			if (resultCnt == 0) {
+				throw new IllegalStateException("해당 상품평이 이미 삭제되어 동영상 노출 처리가 불가합니다. 다시 확인해 주세요.");
+			}
 		}
-
-		review.setOccurGb(TscConstants.PointOccurGb.REVIEW_POINT.value());
-		review.setOccurDtlDesc("동영상상품평포인트 지급");
-		review.setPntAmt(pntAmt);
-		review.setPntUploadStat(TscConstants.PntUploadStat.APPLY_COMPLETE.value());
-
-		// 동영상상품평포인트이력 생성
-		reviewDao.createBestReviewPointHistory(review);
-
-		// 동영상상품평 노출 처리
-		review.setGiveDuePnt(pntAmt);
-		reviewDao.updateVideoReviewDisplay(review);
 	}
 
 	/**

+ 3 - 0
src/main/java/com/style24/persistence/domain/FreeGoods.java

@@ -30,4 +30,7 @@ public class FreeGoods extends TscBaseDomain {
 	private String skucode;  
 	private String skumodelno; 
 	
+	private int limitQty;			// 한정수량(=재고)
+	private int leftQty;			// 남은수량
+	
 }

+ 109 - 89
src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml

@@ -4000,95 +4000,115 @@
 	<!-- 사은품 목록 -->
 	<select id="getFreeGoodsList" parameterType="GoodsSearch" resultType="FreeGoods">
 		/* TsaGoods.getFreeGoodsList */
-		SELECT G.* FROM (
-			SELECT G.PRODUCT_NO
-			     , G.PRODUCT_CODE
-			     , G.GOODS_NM
-			     , G.USE_YN
-			     , G.SYS_IMG_NM
-			     , G.BRAND_CD
-			     , B.BRAND_ENM
-			     , FN_GET_USER_NM(G.REG_NO) AS REG_NM
-			     , DATE_FORMAT(G.REG_DT,'%Y%m%d%H%i%S') AS REG_DT
-			     , FN_GET_USER_NM(G.UPD_NO) AS UPD_NM
-			     , DATE_FORMAT(G.UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT
-			     , (SELECT MAX(SKUCODE) FROM TB_IF_INCOMELOTITEM INC WHERE INC.PRODUCTNO = G.PRODUCT_NO ) AS SKUCODE
-			     , (SELECT MAX(SKUMODELNO) FROM TB_IF_INCOMELOTITEM INC WHERE INC.PRODUCTNO = G.PRODUCT_NO ) AS SKUMODELNO
-			FROM TB_FREE_GOODS G
-			INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
-			INNER JOIN TB_BRAND_SUPPLY BS ON G.BRAND_CD = BS.BRAND_CD
-			WHERE 1 = 1
-			<if test='conditionList != null and conditionList.length>0'>
-			    <choose>
-			      <when test='search != null and search == "searchProductNo"'>
-			AND (
-			      <foreach collection="conditionList" item="item" index="index" separator="or">
-			       G.PRODUCT_NO = #{item}
-			      </foreach>
-			     )
-			      </when>
-			      <when test='search != null and search == "searchGoodsNm"'>
-			AND (
-			      <foreach collection="conditionList" item="item" index="index" separator="or">
-			       UPPER(G.GOODS_NM) LIKE CONCAT(UPPER(#{item}),'%')
-			      </foreach>
-			     )
-			      </when>
-			      <when test='search != null and search == "searchProductCode"'>
-			AND (
-			      <foreach collection="conditionList" item="item" index="index" separator="or">
-			       UPPER(G.PRODUCT_CODE) LIKE CONCAT(UPPER(#{item}),'%')
-			      </foreach>
-			     )
-			      </when>
-			      <otherwise>
-			AND 1 = 1
-			      </otherwise>
-			    </choose>
-			</if>
-			<if test="supplyCompCd != null and supplyCompCd != ''">
-			AND BS.SUPPLY_COMP_CD = #{supplyCompCd}
-			</if>
-			<if test="multiBrand != null and multiBrand != ''">
-			AND B.BRAND_CD IN
-			    <foreach collection="multiBrand" item="item" index="index"  open="(" close=")" separator=",">
-			#{item}
-			    </foreach>
-			</if>
-			<if test='dateGbn != null and dateGbn == "R"'>
-			    <if test="stDate != null and stDate != ''">
-			AND G.REG_DT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
-			    </if>
-			    <if test="edDate != null and edDate != ''">
-			    <![CDATA[
-			AND G.REG_DT < DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
-			    ]]>
-			    </if>
-			</if>
-		) G
-		WHERE 1=1
-			<if test='conditionList != null and conditionList.length>0'>
-			    <choose>
-			      <when test='search != null and search == "searchSkucode"'>
-			AND (
-			      <foreach collection="conditionList" item="item" index="index" separator="or">
-			       G.SKUCODE = #{item}
-			      </foreach>
-			     )
-			      </when>
-			      <when test='search != null and search == "searchSkumodelno"'>
-			AND (
-			      <foreach collection="conditionList" item="item" index="index" separator="or">
-			       UPPER(G.SKUMODELNO) LIKE CONCAT(UPPER(#{item}),'%')
-			      </foreach>
-			     )
-			      </when>
-			      <otherwise>
-			AND 1 = 1
-			      </otherwise>
-			    </choose>
-			</if>
-		ORDER BY G.PRODUCT_NO DESC
+		SELECT G.SYS_IMG_NM
+		     , G.BRAND_CD
+		     , G.BRAND_ENM
+		     , G.PRODUCT_NO
+		     , G.PRODUCT_CODE
+		     , MAX(G.SKUCODE)              AS SKUCODE
+		     , G.GOODS_NM
+		     , MAX(G.SKUMODELNO)           AS SKUMODELNO
+		     , IFNULL(SUM(FV.LIMIT_QTY),0) AS LIMIT_QTY  /*한정수량(=재고)*/
+		     , IFNULL(SUM(FV.LEFT_QTY),0)  AS LEFT_QTY   /*남은수량*/
+		     , G.USE_YN
+		     , G.REG_NM
+		     , G.REG_DT
+		     , G.UPD_NM
+		     , G.UPD_DT
+		FROM   (
+		        SELECT G.SYS_IMG_NM                                    /*시스템이미지명*/
+		             , G.BRAND_CD                                      /*브랜드코드*/
+		             , B.BRAND_ENM                                     /*브랜드영문명*/
+		             , G.PRODUCT_NO                                    /*WMS상품번호*/
+		             , G.PRODUCT_CODE                                  /*WMS상품코드*/
+		             , INC.SKUCODE                                     /*옵션번호*/
+		             , G.GOODS_NM                                      /*상품명(=사은품명)*/
+		             , INC.SKUMODELNO                                  /*옵션모델번호*/
+		             , G.USE_YN                                        /*사용여부*/
+		             , FN_GET_USER_NM(G.REG_NO)              AS REG_NM /*등록자명*/
+		             , DATE_FORMAT(G.REG_DT,'%Y%m%d%H%i%S')  AS REG_DT /*등록일시*/
+		             , FN_GET_USER_NM(G.UPD_NO)              AS UPD_NM /*수정자명*/
+		             , DATE_FORMAT(G.UPD_DT,'%Y%m%d%H%i%S')  AS UPD_DT /*수정일시*/
+		        FROM   TB_FREE_GOODS G
+		        INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
+		        INNER JOIN TB_BRAND_SUPPLY BS ON G.BRAND_CD = BS.BRAND_CD
+		        LEFT OUTER JOIN TB_IF_INCOMELOTITEM INC ON G.PRODUCT_NO = INC.PRODUCTNO
+		        WHERE 1 = 1
+		        <if test='conditionList != null and conditionList.length > 0'>
+		            <choose>
+		                <when test='search != null and search == "searchProductNo"'> <!-- WMS상품번호 -->
+		        AND    (
+		                    <foreach collection="conditionList" item="item" index="index" separator="or">
+		                    G.PRODUCT_NO = #{item}
+		                    </foreach>
+		               )
+		                </when>
+		                <when test='search != null and search == "searchGoodsNm"'> <!-- 사은품명 -->
+		        AND    (
+		                    <foreach collection="conditionList" item="item" index="index" separator="or">
+		                    UPPER(G.GOODS_NM) LIKE CONCAT(UPPER(#{item}),'%')
+		                    </foreach>
+		               )
+		                </when>
+		                <when test='search != null and search == "searchProductCode"'> <!-- WMS상품코드 -->
+		        AND    (
+		                    <foreach collection="conditionList" item="item" index="index" separator="or">
+		                    UPPER(G.PRODUCT_CODE) LIKE CONCAT(UPPER(#{item}),'%')
+		                    </foreach>
+		               )
+		                </when>
+		                <when test='search != null and search == "searchSkucode"'> <!-- SKUCODE -->
+		        AND    (
+		                    <foreach collection="conditionList" item="item" index="index" separator="or">
+		                    INC.SKUCODE = #{item}
+		                    </foreach>
+		               )
+		                </when>
+		                <when test='search != null and search == "searchSkumodelno"'> <!-- SKUMODELNO -->
+		        AND    (
+		                    <foreach collection="conditionList" item="item" index="index" separator="or">
+		                    UPPER(INC.SKUMODELNO) LIKE CONCAT(UPPER(#{item}),'%')
+		                    </foreach>
+		               )
+		                </when>
+		                <otherwise>
+		        AND    1 = 1
+		                </otherwise>
+		            </choose>
+		        </if>
+		        <if test="supplyCompCd != null and supplyCompCd != ''">
+		        AND    BS.SUPPLY_COMP_CD = #{supplyCompCd}
+		        </if>
+		        <if test="multiBrand != null and multiBrand != ''">
+		        AND    B.BRAND_CD IN
+		            <foreach collection="multiBrand" item="item" index="index"  open="(" close=")" separator=",">
+		            #{item}
+		            </foreach>
+		        </if>
+		        <if test='dateGbn != null and dateGbn == "R"'>
+		            <if test="stDate != null and stDate != ''">
+		        AND    G.REG_DT >= STR_TO_DATE(#{stDate},'%Y-%m-%d %H:%i:%S')
+		            </if>
+		            <if test="edDate != null and edDate != ''">
+		        AND    G.REG_DT <![CDATA[<]]> STR_TO_DATE(DATE_ADD(#{edDate},INTERVAL 1 DAY),'%Y-%m-%d %H:%i:%S')
+		            </if>
+		        </if>
+		       ) G
+		LEFT OUTER JOIN TB_FREEGIFT_VAL FV ON G.PRODUCT_NO = FV.PRODUCT_NO
+		                                  AND FV.DEL_YN = 'N' /*삭제안된넘*/
+		WHERE  1 = 1
+		GROUP  BY G.SYS_IMG_NM
+		        , G.BRAND_CD
+		        , G.BRAND_ENM
+		        , G.PRODUCT_NO
+		        , G.PRODUCT_CODE
+		        , G.GOODS_NM
+		        , G.USE_YN
+		        , G.REG_NM
+		        , G.REG_DT
+		        , G.UPD_NM
+		        , G.UPD_DT
+		ORDER  BY G.PRODUCT_NO DESC
 	</select>
 
 	<!-- 상품이미지 변경 -->

+ 57 - 7
src/main/java/com/style24/persistence/mybatis/shop/TsaReview.xml

@@ -268,7 +268,54 @@
 		AND    RPL_CFM_YN = 'N' /*고객이 관리자댓글 확인을 안한넘*/
 	</update>
 
-	<!-- 동영상상품평포인트 생성-->
+	<!-- 상품평구분 조회 (T:텍스트상품평, I:포토상품평, V:동영상상품평, IV:포토+동영상상품평) -->
+	<select id="getReviewGb" parameterType="Review" resultType="String">
+		/* TsaReview.getReviewAttachList */
+		SELECT CASE WHEN IFNULL(RA.VIDEO_CNT,0) = 0 AND IFNULL(RA.IMG_CNT,0) = 0 THEN 'T' /*텍스트상품평*/
+		            ELSE
+		                CASE WHEN IFNULL(RA.VIDEO_CNT,0) = 0 AND IFNULL(RA.IMG_CNT,0) > 0 THEN 'I' /*포토상품평*/
+		                     WHEN IFNULL(RA.VIDEO_CNT,0) > 0 AND IFNULL(RA.IMG_CNT,0) = 0 THEN 'V' /*동영상상품평*/
+		                     ELSE 'IV' /*포토+동영상상품평*/
+		                END
+		       END AS REVIEW_GB
+		FROM   TB_REVIEW R
+		LEFT OUTER JOIN (
+		        SELECT REVIEW_SQ
+		             , SUM(CASE WHEN FILE_GB = 'M' AND KUF_KEY IS NOT NULL THEN 1 ELSE 0 END)     AS VIDEO_CNT
+		             , SUM(CASE WHEN FILE_GB = 'I' AND ORG_FILE_NM IS NOT NULL THEN 1 ELSE 0 END) AS IMG_CNT
+		        FROM   TB_REVIEW_ATTACH
+		        WHERE  REVIEW_SQ = #{reviewSq}
+		        GROUP  BY REVIEW_SQ
+		       ) RA ON R.REVIEW_SQ = RA.REVIEW_SQ
+		WHERE  R.REVIEW_SQ = #{reviewSq}
+	</select>
+	
+	<!-- 상품평포인트 월지급횟수 조회 -->
+	<select id="getReviewPointGiveMonthCount" parameterType="Review" resultType="int">
+		/* TsfReivew.getReviewPointGiveMonthCount */	
+		SELECT COUNT(*) AS CNT
+		FROM   TB_REVIEW R
+		WHERE  R.CUST_NO = (SELECT CUST_NO
+		                    FROM   TB_REVIEW
+		                    WHERE  REVIEW_SQ = #{reviewSq}) /*해당 상품평을 등록한 고객*/
+		AND    R.PNT_GIVE_STAT = 'G043_30' /*포인트반영완료된 넘*/
+		AND    R.REG_DT <![CDATA[>=]]> STR_TO_DATE(CONCAT(DATE_FORMAT(NOW(),'%Y-%m'),'-01'),'%Y-%m-%d') /*당월1일부터*/
+		AND    R.REG_DT <![CDATA[<]]> DATE_ADD(LAST_DAY(NOW()), INTERVAL 1 DAY) /*당월말일까지*/
+	</select>
+		
+	<!-- 상품평포인트 동일상품지급횟수 조회 -->
+	<select id="getReviewPointGiveCount" parameterType="Review" resultType="int">
+		/* TsfReivew.getReviewPointGiveCount */
+		SELECT COUNT(*) AS CNT
+		FROM   TB_REVIEW R
+		WHERE  (R.CUST_NO,R.GOODS_CD) = (SELECT CUST_NO, GOODS_CD
+		                                 FROM   TB_REVIEW
+		                                 WHERE  REVIEW_SQ = #{reviewSq}) /*해당 상품평을 등록한 고객과 상품코드*/
+		AND    R.REVIEW_SQ != #{reviewSq} /*해당 상품평 외*/
+		AND    R.PNT_GIVE_STAT = 'G043_30' /*포인트반영완료된 넘*/
+	</select>
+	
+	<!-- 동영상상품평포인트 생성 (동영상만 등록한 경우 처리) -->
 	<insert id="createVideoReviewPoint" parameterType="Review" keyProperty="custPntSq">
 		/* TsaReview.createVideoReviewPoint */
 		INSERT INTO TB_CUST_POINT (
@@ -297,8 +344,9 @@
 		     , NOW()                            AS UPD_DT
 		FROM   TB_REVIEW
 		WHERE  REVIEW_SQ = #{reviewSq}
-		AND    CONFIRM_YN = 'N' /*동영상노출처리안한넘*/
 		AND    PNT_GIVE_STAT = 'G043_10' /*포인트지급예정 상태*/
+		AND    CONFIRM_YN = 'N' /*동영상노출처리안한넘*/
+		AND    DEL_YN = 'N' /*삭제안된넘*/
 	</insert>
 
 	<!-- 동영상상품평포인트이력 생성-->
@@ -340,22 +388,24 @@
 		     , NOW()            AS UPD_DT
 		FROM   TB_REVIEW
 		WHERE  REVIEW_SQ = #{reviewSq}
-		AND    CONFIRM_YN = 'N' /*동영상노출처리안한넘*/
 		AND    PNT_GIVE_STAT = 'G043_10' /*포인트지급예정 상태*/
+		AND    CONFIRM_YN = 'N' /*동영상노출처리안한넘*/
+		AND    DEL_YN = 'N' /*삭제안된넘*/
 	</insert>
 
 	<!-- 상품평 동영상 노출 처리 -->
 	<update id="updateVideoReviewDisplay" parameterType="Review">
 		/* TsaReview.updateVideoReviewDisplay */
 		UPDATE TB_REVIEW
-		SET    CONFIRM_YN = 'Y'
-		     , GIVE_DUE_PNT = #{giveDuePnt}
-		     , PNT_GIVE_STAT = 'G043_30' /*포인트지급반영*/
+		SET    PNT_GIVE_STAT = #{pntGiveStat}
+		     , CONFIRM_YN = 'Y'
+		     , CONFIRM_UNO = #{confirmUno}
+		     , CONFIRM_DT = NOW()
 		     , UPD_NO = #{updNo}
 		     , UPD_DT = NOW()
 		WHERE  REVIEW_SQ = #{reviewSq}
 		AND    CONFIRM_YN = 'N' /*동영상노출처리안한넘*/
-		AND    PNT_GIVE_STAT = 'G043_10' /*포인트지급예정 상태*/
+		AND    DEL_YN = 'N' /*삭제안된넘*/
 	</update>
 
 	<!-- 베스트상품평포인트 생성-->

+ 6 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaSettle.xml

@@ -197,6 +197,9 @@
 		            #{item}
 		            </foreach>
 		        </if>
+		        <if test='ordNo != null and ordNo != ""'>
+		        AND    O.ORD_NO = #{ordNo}
+		        </if>
 		       ) ODIH
 		ORDER  BY ODIH.ORD_DTL_ITEM_HST_SQ
 	</select>
@@ -445,6 +448,9 @@
 		            #{item}
 		            </foreach>
 		        </if>
+		        <if test='ordNo != null and ordNo != ""'>
+		        AND    OD.ORD_NO = #{ordNo}
+		        </if>
 		       ) OD
 		     , TB_DELIVERY_FEE DF
 		     , TB_SUPPLY_COMPANY SC

+ 10 - 3
src/main/webapp/WEB-INF/views/goods/GoodsFreeGoodsForm.html

@@ -164,9 +164,16 @@
 		},
 		{headerName: "WMS상품코드", field: "productCode", width: 100, cellClass: 'text-center'},
 		{headerName: "SKUCODE", field: "skucode", width: 90, cellClass: 'text-center'},		
- 		{headerName: "사은품명", field: "goodsNm", width: 300, cellClass: 'text-left'},
- 		{headerName: "SKUMODELNO", field: "skumodelno", width: 100, cellClass: 'text-left'},
-
+		{headerName: "사은품명", field: "goodsNm", width: 300, cellClass: 'text-left'},
+		{headerName: "SKUMODELNO", field: "skumodelno", width: 100, cellClass: 'text-left'},
+		{
+			headerName: "재고수량", field: "limitQty", width: 100, cellClass: 'text-center',
+			cellRenderer: function(params) { return gagaAgGrid.toAddComma(params.value) }
+		},
+// 		{
+// 			headerName: "남은수량", field: "leftQty", width: 100, cellClass: 'text-center',
+// 			cellRenderer: function(params) { return gagaAgGrid.toAddComma(params.value) }
+// 		},
 		{headerName: "사용여부", field: "useYn", width: 100, cellClass: 'text-center'},
 		{headerName: "등록일자", field: "regDt", width: 150, cellClass: 'text-center',
 			cellRenderer: function(params) {

+ 20 - 2
src/main/webapp/WEB-INF/views/marketing/ReviewDetailForm.html

@@ -264,7 +264,7 @@
 	// 상품 동영상 노출 처리
 	var fnUpdateVideoReviewDisplay = function(obj) {
 		if ($('#divPicList').find('iframe').length > 0 && $(obj).is(':checked')) {
-			mcxDialog.confirm("동영상이 노출되며 즉시 포인트가 지급됩니다. 계속 진행하시겠습니까?", {
+			mcxDialog.confirm("동영상을 프론트에 노출합니다. 계속 진행하시겠습니까?", {
 				cancelBtnText: "취소",
 				sureBtnText: "확인",
 				sureBtnClick: function() {
@@ -272,7 +272,25 @@
 					$.post(actionUrl
 						, null
 						, function(result) {
-							$(obj).attr('disabled', true);
+							if (result.status == 200) { // 성공
+								if (!gagajf.isNull(result.message)) {
+									mcxDialog.alertC(result.message, {
+										sureBtnText: "확인",
+										sureBtnClick: function() {
+											$(obj).attr('disabled', true);
+										}
+									});
+								}
+							} else {
+								if (!gagajf.isNull(result.error.message)) {
+									mcxDialog.alertC(result.error.message, {
+										sureBtnText: "확인",
+										sureBtnClick: function() {
+											$('#chkConfirmYn').prop('checked', false);
+										}
+									});
+								}
+							}
 						}
 						, 'json');
 				}

+ 26 - 7
src/main/webapp/WEB-INF/views/order/CnclReqForm.html

@@ -932,6 +932,7 @@ var payMeans 		= orderInfoList[0].payMeans;
 var payMeansNm		= orderInfoList[0].payMeansNm;
 var cardNm			= orderInfoList[0].cardNm;
 var addDelvFee		= 0;
+var cnclChk			= false;
 
 //0원이하이면 '-' 처리 삭제 함수
 var getZeroMinusDelAmt = function(tempAmt) {
@@ -1181,6 +1182,11 @@ var fnCnclReq = function (reqGbn) {
 	var accountNm 				= "";
 	var bankCd 					= "";
 	
+	// 취소신청 버튼 클릭 여부 체크
+	if (cnclChk) {
+		return false;
+	}
+	
 	// 취소완료, 취소승인
 	let chk = false;
 	if (reqGbn == "cnclReq" || reqGbn == "cnclReqComplete" || reqGbn == "cnclComplete") {
@@ -1331,19 +1337,23 @@ var fnCnclReq = function (reqGbn) {
 
 	// 주문번호, 취소사유, 취소메모, (취소, 반품, 교환 신청 정보 목록), 환불계좌
 	var jsonData = JSON.stringify(jsonObj);
-	
+
+	// 취소버튼 클릭 여부 확인
 	mcxDialog.confirm(confirmStr, {
-		cancelBtnText		: "취소",
-		sureBtnText			: "확인",
-		sureBtnClick		: function() {
+		cancelBtnText: "취소",
+		sureBtnText: "확인",
+		sureBtnClick: function () {
 			if (chk && jsonObj.pgStat == 'N') {
 				// 환불계좌 유효성 체크
-				gagajf.ajaxJsonSubmit('/business/account/check', jsonData, function(result) {
+				gagajf.ajaxJsonSubmit('/business/account/check', jsonData, function (result) {
 					if (result.isValid) { // 유효하면 true
+						// 취소버튼 클릭 여부 설정
+						cnclChk = true;
+						
 						gagajf.ajaxJsonSubmit(
 							cnclUrl
 							, jsonData
-							, function() {
+							, function () {
 								// 2021.06.21 교환품절취소가 아닐때 주문상세화면 다시 로딩하지 않음
 								if (chgStat == 'G685_40') {
 									// 교환배송 취소대상목록 조회 실행
@@ -1354,6 +1364,9 @@ var fnCnclReq = function (reqGbn) {
 								}
 								uifnPopupClose('popupCancelRequestForm');
 							}
+							, function () {
+								cnclChk = false;
+							}
 						);
 					} else {
 						mcxDialog.alert('환불계좌가 유효하지 않습니다.');
@@ -1361,10 +1374,13 @@ var fnCnclReq = function (reqGbn) {
 					}
 				});
 			} else {
+				// 취소버튼 클릭 여부 설정
+				cnclChk = true;
+				
 				gagajf.ajaxJsonSubmit(
 					cnclUrl
 					, jsonData
-					, function() {
+					, function () {
 						// 2021.06.21 교환품절취소가 아닐때 주문상세화면 다시 로딩하지 않음
 						if (chgStat == 'G685_40') {
 							// 교환배송 취소대상목록 조회 실행
@@ -1375,6 +1391,9 @@ var fnCnclReq = function (reqGbn) {
 						}
 						uifnPopupClose('popupCancelRequestForm');
 					}
+					, function () {
+						cnclChk = false;
+					}
 				);
 			}
 		}

+ 13 - 1
src/main/webapp/WEB-INF/views/order/ExchangeRequestForm.html

@@ -661,6 +661,7 @@ var gridOptionsDelvCdList = gagaAgGrid.getGridOptions(columnDelvCdList);
 <script>
 //현재 사유는 회사 입니다.
 var isCustomer = false;
+var exchangeChk = false;
 
 //  사유 변경
 var fnChangeChgReason = function(reasonCd){
@@ -706,6 +707,11 @@ var fnExchange = function () {
 	var opt		= true;
 	var wdGb	= $('#wdGb:checked').val();
 	
+	// 교환신청 버튼 클릭 여부 체크
+	if (exchangeChk) {
+		return false;
+	}
+	
 	if (ordChgGb == 'G681_50') {
 		wdGb = 'D';
 	}
@@ -933,6 +939,9 @@ var fnExchange = function () {
 		url = '/orderChange/exchange/request/';
 	}
 
+	// 교환신청 버튼 클릭 여부 설정
+	exchangeChk = true;
+
 	mcxDialog.confirm('교환요청하시겠습니까?', {
 		cancelBtnText		: "취소",
 		sureBtnClick		: function(){
@@ -950,6 +959,9 @@ var fnExchange = function () {
 						uifnPopupClose('popupExchangeRequestForm');
 					}
 				}
+				, function() {
+					exchangeChk = false;
+				}
 			);
 		}
 	});
@@ -1118,7 +1130,7 @@ var fnChangeOption = function(param) {
 		}
 	});
 	
-	fnChangeQty(param);
+	fnChangeQty();
 }
 
 //환불예상금액계산

+ 18 - 0
src/main/webapp/WEB-INF/views/order/RtnReqForm.html

@@ -966,6 +966,7 @@ var gridOptionsDelvCdList = gagaAgGrid.getGridOptions(columnDelvCdList);
 <script>
 // 현재 사유는 고객 입니다.
 var isCustomer = false;
+var rtnChk = false;
 
 // 환불예상금액계산
 var fnCalculateRefundAmt = function (obj) {
@@ -1380,6 +1381,11 @@ var fnCnclReq = function (reqGbn) {
 	var chgerEmail 		= "";
 	var chgerRtnMemo	= "";
 	
+	// 반품신청 버튼 클릭 여부 체크
+	if (rtnChk) {
+		return false;
+	}
+	
 	// 반품신청
 	let chk = false;
 	if (reqGbn == "rtnReq") {
@@ -1543,6 +1549,9 @@ var fnCnclReq = function (reqGbn) {
 				// 환불계좌 유효성 체크
 				gagajf.ajaxJsonSubmit('/business/account/check', jsonData, function(result) {
 					if (result.isValid) { // 유효하면 true
+						// 반품신청 버튼 클릭 여부 설정
+						rtnChk = true;
+
 						// 취소 실행
 						gagajf.ajaxJsonSubmit(
 							cnclUrl
@@ -1552,6 +1561,9 @@ var fnCnclReq = function (reqGbn) {
 								fnReOpenOrderDetailPopup();
 								uifnPopupClose('popupReturnRequestForm');
 							}
+							, function () {
+								rtnChk = false;
+							}
 						);
 					} else {
 						mcxDialog.alert('환불계좌가 유효하지 않습니다.');
@@ -1559,6 +1571,9 @@ var fnCnclReq = function (reqGbn) {
 					}
 				});
 			} else {
+				// 반품신청 버튼 클릭 여부 설정
+				rtnChk = true;
+
 				// 취소 실행
 				gagajf.ajaxJsonSubmit(
 					cnclUrl
@@ -1568,6 +1583,9 @@ var fnCnclReq = function (reqGbn) {
 						fnReOpenOrderDetailPopup();
 						uifnPopupClose('popupReturnRequestForm');
 					}
+					, function () {
+						rtnChk = false;
+					}
 				);
 			}
 		}

+ 8 - 2
src/main/webapp/WEB-INF/views/settle/DeliveryFeeSettleForm.html

@@ -31,13 +31,15 @@
 				<table class="frmStyle" aria-describedby="검색조건">
 					<colgroup>
 						<col style="width:10%;"/>
-						<col style="width:60%;"/>
+						<col style="width:25%;"/>
+						<col style="width:10%;"/>
+						<col style="width:25%;"/>
 						<col style="width:10%;"/>
 						<col/>
 					</colgroup>
 					<tr>
 						<th>매출기간<i class="required" title="필수" aria-hidden="true"></i></th>
-						<td id="terms">
+						<td id="terms" colspan="3">
 						</td>
 						<th>유통구분</th>
 						<td>
@@ -70,6 +72,10 @@
 							<span id="brandTxt"></span>
 							<input type="hidden" name="brandList"/>
 						</td>
+						<th>주문번호</th>
+						<td>
+							<input type="text" class="w200" name="ordNo" placeholder="" maxlength="20" data-valid-type="numeric"/>
+						</td>
 					</tr>
 				</table>
 				

+ 6 - 0
src/main/webapp/WEB-INF/views/settle/GoodsSettleForm.html

@@ -89,6 +89,12 @@
 							<input type="hidden" name="brandList"/>
 						</td>
 					</tr>
+					<tr>
+						<th>주문번호</th>
+						<td colspan="5">
+							<input type="text" class="w200" name="ordNo" placeholder="" maxlength="20" data-valid-type="numeric"/>
+						</td>
+					</tr>
 				</table>
 				
 				<ul class="panelBar">

+ 10 - 1
src/main/webapp/ux/plugins/gaga/gaga.validation.js

@@ -642,10 +642,11 @@ var gagajf = {
 	 * @param actionUrl - Request URL
 	 * @param jsonData - Data of json format
 	 * @param callbackFn - Callback function
+	 * @param errorCallbackFn - ErrorCallback function
 	 * @author gagamel
 	 * @since 2019. 4. 8
 	 */
-	ajaxJsonSubmit : function(actionUrl, jsonData, callbackFn) {
+	ajaxJsonSubmit : function(actionUrl, jsonData, callbackFn, errorCallbackFn) {
 		$.ajax({
 			type : 'POST',
 			url : actionUrl,
@@ -697,6 +698,10 @@ var gagajf = {
 					if (!gagajf.isNull(result.error.message)) {
 						mcxDialog.alert(result.error.message.replaceAll("&lt;", "<").replaceAll("&gt;", ">"));
 					}
+					
+					if (typeof(errorCallbackFn) == "function") {
+						errorCallbackFn.call(this, result);
+					}
 
 					return;
 				}
@@ -704,6 +709,10 @@ var gagajf = {
 			error : function(result) {
 				console.log(result);
 				mcxDialog.alert('오류로 인해 처리되지 않았습니다.');
+				
+				if (typeof(errorCallbackFn) == "function") {
+					errorCallbackFn.call(this, result);
+				}
 			}
 		});
 	},