Kaynağa Gözat

기획전코너관리 중간커밋

sowon4187 5 yıl önce
ebeveyn
işleme
4d5b7cb6be

+ 79 - 4
src/main/java/com/style24/admin/biz/dao/TsaPlanDao.java

@@ -5,7 +5,6 @@ import java.util.Collection;
 import org.springframework.stereotype.Repository;
 
 import com.style24.core.support.annotation.ShopDs;
-import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.Plan;
 
 /**
@@ -129,6 +128,15 @@ public interface TsaPlanDao {
 	 */
 	void createPlanBrand(Plan param);
 	
+	/**
+	 * 기획전 브랜드 삭제
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 2. 17
+	 */
+	void deletePlanBrand(Plan param);
+	
 	/**
 	 * 기획전 브랜드 목록
 	 *
@@ -140,7 +148,7 @@ public interface TsaPlanDao {
 	Collection<Plan> getPlanBrandList(Plan param);
 
 	/**
-	 * 기획전 코너 등록
+	 * 기획전 카테고리 등록
 	 *
 	 * @param
 	 * @author sowon
@@ -149,7 +157,16 @@ public interface TsaPlanDao {
 	void createPlanCate(Plan param);
 	
 	/**
-	 * 기획전 코너 목록
+	 * 기획전 카테고리 삭제
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 2. 17
+	 */
+	void deletePlanCate(Plan param);
+	
+	/**
+	 * 기획전 카테고리 목록
 	 *
 	 * @param 
 	 * @return
@@ -159,7 +176,7 @@ public interface TsaPlanDao {
 	Collection<Plan> getPlanCateList(Plan param);
 	
 	/**
-	 * 기획전 코너 복사
+	 * 기획전 카테고리 복사
 	 *
 	 * @param
 	 * @author sowon
@@ -176,5 +193,63 @@ public interface TsaPlanDao {
 	 * @since 2021. 2. 16
 	 */
 	Integer getPlanDtlSq(Plan param);
+	
+	/**
+	 * 기획전 코너 목록 조회
+	 *
+	 * @param 기획전 일련번호
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 17
+	 */
+	Collection<Plan> getPlanCornerList(Plan param);
+
+	
+	/**
+	 * 기획전 코너 삭제
+	 *
+	 * @param 기획전 상세번호
+	 * @author sowon
+	 * @since 2021. 2. 17
+	 */
+	void deletePlanCornerInfo(Plan param);
+	
+	/**
+	 * 기획전 코너 정보 저장
+	 *
+	 * @param 기획전 코너 정보
+	 * @author sowon
+	 * @since 2021. 2. 17
+	 */
+	void savePlanCornerInfo(Plan param);
+	
+	/**
+	 * 기획전 코너 상품 조회
+	 *
+	 * @param 기획전 상세번호
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 17
+	 */
+	Collection<Plan> getPlanGoodsList(Plan param);
+	
+	/**
+	 * 기획전 코너 상품 조회 건수
+	 *
+	 * @param 기획전 상세번호
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 17
+	 */
+	int getPlanGoodsListCount(Plan param);
+	
+	/**
+	 * 기획전 코너 상품 등록
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 2. 17
+	 */
+	void savePlanCornerGoods(Plan param);
 
 }

+ 174 - 22
src/main/java/com/style24/admin/biz/service/TsaPlanService.java

@@ -86,14 +86,14 @@ public class TsaPlanService {
 		log.debug("planSq : {}", param.getPlanSq());
 
 		// 웹용 소스
-		if (StringUtils.isNotBlank(param.getFsrcPc())) {
-			createPlanFsrcPc(param);
-		}
-
-		// 모바일용 소스
-		if (StringUtils.isNotBlank(param.getFsrcMobile())) {
-			createPlanFsrcMobile(param);
-		}
+//		if (StringUtils.isNotBlank(param.getFsrcPc())) {
+//			createPlanFsrcPc(param);
+//		}
+//
+//		// 모바일용 소스
+//		if (StringUtils.isNotBlank(param.getFsrcMobile())) {
+//			createPlanFsrcMobile(param);
+//		}
 
 		//기획전 응모이벤트
 //		if (StringUtils.isNotBlank(param.getPrivacyPolicy())) {
@@ -343,6 +343,7 @@ public class TsaPlanService {
 	 */
 	@Transactional("shopTxnManager")
 	public void updatePlanWebInfo(Plan param) {
+		Plan plan = new Plan();
 		log.debug("param {}", param);
 		String targetPath = env.getProperty("upload.default.target.path") + "/planning";
 		param.setRegNo(TsaSession.getInfo().getUserNo());
@@ -370,23 +371,54 @@ public class TsaPlanService {
 			deleteFile(targetPath, param.getOrgReplyImg());
 		}
 
+		// 기존 기획전 카테고리 삭제 
+		for (int i = 0; i < param.getMultiCate().length; i++) {
+			planDao.deletePlanCate(param);
+		}
+		
+		String[] cate = param.getMultiCate();
+		// 기획전 카테고리insert
+		for (int j = 0; j < cate.length; j++) {
+			plan.setCateNo(cate[j]);
+			plan.setPlanSq(param.getPlanSq());
+			plan.setRegNo(TsaSession.getInfo().getUserNo());
+			plan.setUpdNo(TsaSession.getInfo().getUserNo());
+			planDao.createPlanCate(plan);
+		}
+		
+		// 기존 기획전 카테고리 삭제 
+		for (int i = 0; i < param.getMultiCate().length; i++) {
+			planDao.deletePlanCate(param);
+		}
+		
+		String[] brand = param.getMultiBrand();
+		// 기획전 브랜드 insert
+		for (int j = 0; j < brand.length; j++) {
+			plan.setBrandCd(brand[j]);
+			plan.setPlanSq(param.getPlanSq());
+			plan.setRegNo(TsaSession.getInfo().getUserNo());
+			plan.setUpdNo(TsaSession.getInfo().getUserNo());
+			planDao.createPlanBrand(plan);
+		}
+		
+		// 최종업데이트 
 		planDao.updatePlanWebInfo(param);
 
 		// 웹용 소스
-		if (StringUtils.isNotBlank(param.getFsrcPc())) {
-			createPlanFsrcPc(param);
-		} else {
-			param.setFrontGb("P");
-			planDao.deletePlanFsrcInfo(param);
-		}
-
-		// 모바일용 소스
-		if (StringUtils.isNotBlank(param.getFsrcMobile())) {
-			createPlanFsrcMobile(param);
-		} else {
-			param.setFrontGb("M");
-			planDao.deletePlanFsrcInfo(param);
-		}
+//		if (StringUtils.isNotBlank(param.getFsrcPc())) {
+//			createPlanFsrcPc(param);
+//		} else {
+//			param.setFrontGb("P");
+//			planDao.deletePlanFsrcInfo(param);
+//		}
+//
+//		// 모바일용 소스
+//		if (StringUtils.isNotBlank(param.getFsrcMobile())) {
+//			createPlanFsrcMobile(param);
+//		} else {
+//			param.setFrontGb("M");
+//			planDao.deletePlanFsrcInfo(param);
+//		}
 
 		//기획전 응모이벤트
 //		if (StringUtils.isNotBlank(param.getPrivacyPolicy())) {
@@ -518,6 +550,30 @@ public class TsaPlanService {
 		return planDao.getPlanCateList(param);
 	}
 	
+	/**
+	 * 기획전 코너 목록 조회
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 17
+	 */
+	public Collection<Plan> getPlanCornerList(Plan param) {
+		
+		Collection<Plan> cornerList = planDao.getPlanCornerList(param);
+		for (Plan corner : cornerList) {
+			// 날짜 설정
+			String[] stDate = corner.getDispStdt().split(" ");
+			corner.setStartSearchDate(stDate[0]);                                                 
+			corner.setStartSearchTime(stDate[1].substring(0, 8));
+			
+			String[] edDate = corner.getDispEddt().split(" ");
+			corner.setEndSearchDate(edDate[0]);                                                 
+			corner.setEndSearchTime(edDate[1].substring(0, 8));
+		}
+		return cornerList;
+	}
+	
 	/**
 	 * 기획전 코너 시퀀스 조회
 	 *
@@ -529,5 +585,101 @@ public class TsaPlanService {
 	public Integer getPlanDtlSq(Plan param) {
 		return planDao.getPlanDtlSq(param);
 	}
+	
+	/**
+	 * 기획전 코너 삭제 처리
+	 *
+	 * @param
+	 * @return
+	 * @author rladbwnd5
+	 * @since 2020. 1. 3
+	 */
+	@Transactional("shopTxnManager")
+	public void deletePlanCornerInfo(Collection<Plan> paramList) {
+		for (Plan cornerInfo : paramList) {
+			planDao.deletePlanCornerInfo(cornerInfo);
+			//marketingDao.deletePlanCornerGoods(cornerInfo);
+		}
+	}
+	
+	/**
+	 * 기획전 코너 저장
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 17
+	 */
+	@Transactional("shopTxnManager")
+	public void savePlanCornerInfo(Collection<Plan> paramList) {
+		for (Plan cornerInfo : paramList) {
+			cornerInfo.setRegNo(TsaSession.getInfo().getUserNo());
+			cornerInfo.setUpdNo(TsaSession.getInfo().getUserNo());
+
+			planDao.savePlanCornerInfo(cornerInfo);
+		}
+
+	}
+	
+	/**
+	 * 기획전 코너 상품 조회
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 17
+	 */
+	public Collection<Plan> getPlanGoodsList(Plan param) {
+		return planDao.getPlanGoodsList(param);
+	}
+	
+	/**
+	 * 기획전 코너 상품 조회 건수
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 17
+	 */
+	public int getPlanGoodsListCount(Plan param) {
+		return planDao.getPlanGoodsListCount(param);
+	}
+	
+	/**
+	 * 기획전 코너 상품 추가
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 17
+	 */
+	@Transactional("shopTxnManager")
+	public void savePlanGoods(Collection<Plan> paramList) {
+		int disp = 1;
+		for (Plan param : paramList) {
+			param.setDispOrd(disp);
+			param.setPlanDtlSq(param.getPlanDtlSq());
+			savePlanCornerGoods(param);
+			disp++;
+		}
+	}
+
+	/**
+	 * 기획전 코너 상품 저장
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 17
+	 */
+	@Transactional("shopTxnManager")
+	public void savePlanCornerGoods(Plan param) {
+		Plan plan = new Plan();
+		
+		plan.setRegNo(TsaSession.getInfo().getUserNo());
+		plan.setUpdNo(TsaSession.getInfo().getUserNo());
+		plan.setGoodsCd(param.getGoodsCd());
+		planDao.savePlanCornerGoods(plan);
+	}
 
 }

+ 69 - 12
src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -1770,11 +1770,25 @@ public class TsaMarketingController extends TsaBaseController {
 		// 기획전 상세 정보
 		mav.addObject("planInfo", planService.getPlanWebDetailInfo(param));
 
+
 		mav.setViewName("marketing/PlanCornerListForm");
 
 		return mav;
 	}
 	
+	/**
+	 * 기획전 코너 목록
+	 *
+	 * @return
+	 * @author sowon
+	 * @since 2020. 1. 2
+	 */
+	@PostMapping("/planning/corner/list")
+	@ResponseBody
+	public Collection<Plan> getPlanCornerList(@RequestBody Plan param) {
+		return planService.getPlanCornerList(param);
+	}	
+	
 	/**
 	 * 기획전 코너 상품 조회
 	 *
@@ -1782,18 +1796,19 @@ public class TsaMarketingController extends TsaBaseController {
 	 * @author sowon
 	 * @since 2021. 2. 16
 	 */
-//	@PostMapping("/planning/corner/goods/list")
-//	@ResponseBody
-//	public GagaMap getPlanGoodsList(@RequestBody Plan plan) {
-//		GagaMap result = new GagaMap();
-//		if ("Y".equals(plan.getPageYn())) {
-//			plan.setPageable(new TscPageRequest(plan.getPageNo() - 1, plan.getPageSize()));
-//			plan.getPageable().setTotalCount(planService.getPlanGoodsListCount(plan));
-//		}
-//		result.set("pageing", plan);
-//		result.set("planGoodsList", planService.getPlanGoodsList(plan));
-//		return result;
-//	}
+	@PostMapping("/planning/corner/goods/list")
+	@ResponseBody
+	public GagaMap getPlanGoodsList(@RequestBody Plan plan) {
+		GagaMap result = new GagaMap();
+		
+		if ("Y".equals(plan.getPageYn())) {
+			plan.setPageable(new TscPageRequest(plan.getPageNo() - 1, plan.getPageSize()));
+			plan.getPageable().setTotalCount(planService.getPlanGoodsListCount(plan));
+		}
+		result.set("pageing", plan);
+		result.set("planGoodsList", planService.getPlanGoodsList(plan));
+		return result;
+	}
 	
 	/**
 	 * 기획전 코너 시퀀스 번호
@@ -1807,6 +1822,48 @@ public class TsaMarketingController extends TsaBaseController {
 	public long getPlanDtlSq(Plan param) {
 		return planService.getPlanDtlSq(param);
 	}
+	
+	/**
+	 * 기획전 코너 삭제
+	 *
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 17
+	 */
+	@PostMapping("/planning/corner/delete")
+	@ResponseBody
+	public GagaResponse deletePlanCornerInfo(@RequestBody Collection<Plan> paramList) {
+		planService.deletePlanCornerInfo(paramList);
+		return super.ok(message.getMessage("SUCC_0003"));
+	}
+	
+	/**
+	 * 기획전 코너 저장
+	 *
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 17
+	 */
+	@PostMapping("/planning/corner/save")
+	@ResponseBody
+	public GagaResponse savePlanCornerInfo(@RequestBody Collection<Plan> paramList) {
+		planService.savePlanCornerInfo(paramList);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
+	/**
+	 * 기획전 코너 상품 추가
+	 *
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 17
+	 */
+	@PostMapping("/planning/corner/goods/save")
+	@ResponseBody
+	public GagaResponse savePlanGoods(@RequestBody Collection<Plan> paramList) {
+		planService.savePlanGoods(paramList);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
 
 
 }

+ 2 - 1
src/main/java/com/style24/persistence/domain/Plan.java

@@ -83,7 +83,7 @@ public class Plan extends TscBaseDomain{
 		private String cornerNm;			//코너 명
 		private String planDtlStat;			//기획전상세상태(공통코드G044)
 		private String copyBrandCd;	        //복사할 브랜드코드
-		
+		private String adminPreview;	// 어드민미리보기 여부 (Y:미리보기)
 		// 기획전 브랜드
 		private String brandCd;		//기획전브랜드코드
 		private String DispYn;      	//표시여부           
@@ -146,6 +146,7 @@ public class Plan extends TscBaseDomain{
 		private String currStockQty;		// 재고
 		private String pageYn;				// 페이징 사용 여부
 		private String changeGb;			// 순서변경 updown 구분
+		private int stockQtySum;			// 재고
 
 		// 기획전 팝업
 		private String callBackFun;			// 콜백함수명

+ 246 - 32
src/main/java/com/style24/persistence/mybatis/shop/TsaPlan.xml

@@ -478,6 +478,13 @@
 		   )
 	</insert>
 	
+	<delete id="deletePlanBrand" parameterType="Plan">
+		/* TsaMarketing.deletePlanBrand */
+		DELETE 
+		FROM TB_PLAN_BRAND
+		WHERE PLAN_SQ = ${planSq}
+	</delete>
+	
 	<select id="getPlanBrandList" parameterType="Plan" resultType="Plan">
 		/* TsaMarketing.getPlanBrandList */
 		SELECT TP.PLAN_NM AS PLAN_NM
@@ -544,6 +551,13 @@
 	
 	</insert>
 	
+	<delete id="deletePlanCate" parameterType="Plan">
+		/* TsaMarketing.deletePlanCate */
+		DELETE 
+		FROM TB_PLAN_CATE
+		WHERE PLAN_SQ = ${planSq}
+	</delete>
+	
 	<select id="getPlanCateList" parameterType="Plan" resultType="Plan">
 		/* TsaMarketing.getPlanCateList */
 		 SELECT TP.PLAN_NM AS PLAN_NM
@@ -588,43 +602,243 @@
 	        	     AND CATE_NO = #{cateNo}
 	</insert>
 	
+	<!-- 기획전 코너 시퀀스 조회 -->
+	<select id="getPlanDtlSq" parameterType="Plan" resultType="Integer">
+		/* TsaMarketing.getPlanDtlSq */
+		SELECT CASE COUNT(*) 
+			   WHEN 0 THEN 1 
+			   ELSE MAX(PLAN_DTL_SQ) + 1 
+			   END AS PLAN_DTL_SQ 
+		FROM TB_PLAN_DETAIL
+	</select>
+	
+	<!-- 기획전 코너 목록 -->
+	<select id="getPlanCornerList" parameterType="Plan" resultType="Plan">
+		/* TsaMarketing.getPlanCornerList */
+		SELECT A.PLAN_SQ
+		     , B.PLAN_DTL_SQ
+		     , B.CORNER_NM
+		     , B.CORNER_DISP_TYPE
+	<!-- 	     , #{adminPreview} AS ADMIN_PREVIEW -->
+	         , FN_GET_USER_NM(B.REG_NO) AS REG_NM
+	         , FN_GET_USER_NM(B.UPD_NO) AS UPD_NM     
+	         , B.DISP_STDT 
+     	     , B.DISP_EDDT 
+     	     , B.DISP_ORD 
+		FROM   TB_PLAN A
+		     , TB_PLAN_DETAIL B
+		WHERE  A.PLAN_SQ = B.PLAN_SQ
+	<!-- 	<if test='adminPreview != "Y"'> 
+		AND    now() BETWEEN B.DISP_STDT AND B.DISP_EDDT
+		</if> -->
+		AND    A.PLAN_SQ = #{planSq}
+		ORDER  BY B.DISP_ORD
+	</select>
+	
+	<!-- 기획전 코너 삭제 처리 -->
+	<delete id="deletePlanCornerInfo" parameterType="Plan">
+		/* TsaMarketing.deletePlanCornerInfo */
+		DELETE 
+		FROM TB_PLAN_DETAIL 
+		WHERE  PLAN_SQ = #{planSq}
+		AND    PLAN_DTL_SQ = #{planDtlSq}
+	</delete>
+	
+	<!-- 기획전 코너 저장 -->
+	<insert id="savePlanCornerInfo" parameterType="Plan">
+		/* TsaMarketing.savePlanCornerInfo */
+		INSERT INTO
+			      TB_PLAN_DETAIL (
+			            PLAN_SQ         
+                      , PLAN_DTL_SQ     
+                      , DISP_STDT       
+                      , DISP_EDDT       
+                      , CORNER_DISP_TYPE
+                      , CORNER_NM       
+                      , DISP_ORD        
+                      , REG_NO          
+                      , REG_DT          
+                      , UPD_DT          
+                      , UPD_NO          
+			      )
+			   VALUES (
+			    	   #{planSq}                                         
+                     , #{planDtlSq}                                      
+                     , DATE_FORMAT(#{dispStdt} , '%Y-%m-%d %H:%i:%s')     
+                     , DATE_FORMAT(#{dispEddt} , '%Y-%m-%d %H:%i:%s')   
+                     , #{cornerDispType}                                 
+                     , #{cornerNm}                                       
+                     , #{dispOrd}                                        
+                     , #{regNo}                                          
+                     , now()                                           
+                     , now()                                           
+                     , #{updNo}                                          
+			     )
+			   ON
+			      DUPLICATE KEY
+			   UPDATE
+			        DISP_STDT = DATE_FORMAT(#{dispStdt} , '%Y-%m-%d %H:%i:%s')      
+				  , DISP_EDDT = DATE_FORMAT(#{dispEddt} , '%Y-%m-%d %H:%i:%s')      
+				  , CORNER_DISP_TYPE = #{cornerDispType}                         
+				  , CORNER_NM = #{cornerNm}                                      
+				  , DISP_ORD = #{dispOrd}                                        
+				  , UPD_DT = now()                                             
+				  , UPD_NO = #{updNo}                                            
+	</insert>
+	
+	<!-- 기획전 코너 상품 목록 조회 -->
+	<select id="getPlanGoodsList" parameterType="Plan" resultType="Plan">
+		/* TsaGoods.getPlanGoodsList */
+		SELECT Q.*
+		    , (CASE WHEN Q.GOODS_TYPE = 'G056_N' THEN (SELECT IFNULL(SUM(CURR_STOCK_QTY - BASE_STOCK_QTY),0) FROM VW_STOCK WHERE GOODS_CD = Q.GOODS_CD) 
+		            ELSE (SELECT IFNULL(SUM(CURR_STOCK_QTY - BASE_STOCK_QTY),0) FROM VW_STOCK_COMPOSE WHERE GOODS_CD = Q.GOODS_CD) 
+		            END) AS STOCK_QTY_SUM
+		    , FN_GET_USER_NM(REG_NO) AS REG_NM
+		    , FN_GET_USER_NM(UPD_NO) AS UPD_NM
+		    , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG  WHERE GOODS_CD = Q.GOODS_CD AND COLOR_CD = Q.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' ) AS SYS_IMG_NM
+		    , CASE IFNULL((SELECT COUNT(SYS_IMG_NM) FROM TB_GOODS_IMG  WHERE GOODS_CD = Q.GOODS_CD AND COLOR_CD = Q.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' ),0) 
+		            WHEN 0 THEN 'N'
+		            ELSE 'Y' END AS GOODS_IMAGE_YN
+		FROM (     
+			SELECT Z.*
+			FROM (
+			    SELECT A.*, @rownum := @rownum + 1 AS RNUM 
+			    FROM (
+			        SELECT
+			                 G.GOODS_CD                                                                   
+			               , G.GOODS_TYPE                                                                 
+			               , G.SUPPLY_COMP_CD                                                             
+			               , G.SUPPLY_GOODS_CD                                                            
+			               , G.GOODS_NUM                                                                  
+			               , G.GOODS_NM                                                                   
+			               , G.GOODS_STAT                                                                 
+			               , G.LIST_PRICE                                                                 
+			               , G.CURR_PRICE                                                                 
+			               , G.DC_RATE                                                                    
+			               , G.FORMAL_GB                                                                  
+			               , G.SEASON_CD       
+			               , (SELECT SUPPLY_COMP_NM
+                 				FROM   TB_SUPPLY_COMPANY
+                 				WHERE  SUPPLY_COMP_CD = G.SUPPLY_COMP_CD
+              				   ) AS SUPPLY_COMP_NM                                                           
+			               , G.ERP_STOCK_LINK_YN                                                          
+			               , G.ERP_PRICE_LINK_YN                                                          
+			               , G.CHANGEABLE_YN                                                              
+			               , G.RETURNABLE_YN                                                              
+			               , G.NEW_CUST_ORD_YN                                                            
+			               , G.GIFT_PACK_YN                                                               
+			               , G.DELV_FEE_CD                                                                
+			               , G.MAIN_COLOR_CD                                                              
+			               , G.FRST_CFRM_DT                  
+			               , G.SELL_FEE_RATE                                                              
+			               , G.PRICE_UPD_DT                   
+			               , TG.REG_NO                                                                    
+			               , TG.REG_DT                              
+			               , TG.UPD_NO                                                                    
+			               , TG.UPD_DT                              
+			         FROM TB_GOODS G
+					        JOIN ( SELECT @rownum := 0) R
+					        INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
+					        INNER JOIN TB_PLAN_GOODS TG ON G.GOODS_CD = TG.GOODS_CD 
+			         WHERE 1=1
+			         	 AND TG.PLAN_DTL_SQ = #{planDtlSq}
+			         ORDER BY G.REG_DT DESC, G.GOODS_CD
+		<include refid="getListPagingCondition_sql"/>
+		)Q
+	</select>
+	
 	<!-- 기획전 코너 상품 목록 조회 건수 -->
 	<select id="getPlanGoodsListCount" parameterType="Plan" resultType="int">
 		/* TsaMarketing.getPlanGoodsListCount */
-		SELECT COUNT(*) AS TOTCNT
-		FROM ( SELECT A.PLAN_DTL_SQ     
-		            , A.GOODS_CD        
-		            , B.GOODS_NM        
-		            , B.DC_RATE         
-		            , B.LIST_PRICE      
-		            , B.CURR_PRICE      
-		            , B.SUPPLY_COMP_CD  
-		            , DECODE(B.FORMAL_GB, 10, '정상', 20, '이월') AS FORMAL_GB  
-		            , C.IMG_TYPE        
-		            , C.IMG_PATH1       
-		            , A.DISP_ORD        
-		            , A.DEL_YN          
-		            , B.GOODS_STAT      
-		            , A.REG_ID          
-		            , A.REG_DT          
-		            , A.UPD_ID          
-		            , A.UPD_DT          
-		       FROM   TB_PLAN_GOODS A
-		            , TB_GOODS B
-		            , TB_GOODS_IMG C
-		       WHERE  A.GOODS_CD = B.GOODS_CD
-		       AND    A.GOODS_CD = C.GOODS_CD(+)
-		       AND    A.PLAN_DTL_SQ = #{planDtlSq}
-		       AND    A.DEL_YN = 'N'
-		       ORDER  BY DISP_ORD
-		)
+		SELECT COUNT(*) AS CNT
+		FROM (
+		    SELECT
+		            G.GOODS_CD
+		          , G.GOODS_TYPE
+		          , G.SUPPLY_COMP_CD
+		          , G.SUPPLY_GOODS_CD
+		          , G.GOODS_NUM
+		          , G.GOODS_NM
+		          , G.GOODS_STAT
+		          , G.LIST_PRICE
+		          , G.CURR_PRICE
+		          , G.DC_RATE
+		          , G.FORMAL_GB
+		          , G.STYLE_YEAR
+		          , G.SEASON_CD
+		          , G.ERP_STOCK_LINK_YN
+		          , G.ERP_PRICE_LINK_YN
+		          , G.CHANGEABLE_YN
+		          , G.RETURNABLE_YN
+		          , G.NEW_CUST_ORD_YN
+		          , G.GIFT_PACK_YN
+		          , G.DELV_FEE_CD
+		          , G.MAIN_COLOR_CD
+		          , DATE_FORMAT(G.FRST_CFRM_DT, '%Y%m%d%H%i%S') AS FRST_CFRM_DT
+		          , G.SELL_FEE_RATE
+		          , DATE_FORMAT(G.PRICE_UPD_DT,'%Y%m%d%H%i%S') AS PRICE_UPD_DT
+		          , TG.REG_NO
+		          , DATE_FORMAT(TG.REG_DT,'%Y%m%d%H%i%S') AS REG_DT
+		          , TG.UPD_NO
+		          , DATE_FORMAT(TG.UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT
+		          , G.TAG_PRICE
+		        FROM TB_GOODS G
+		        INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
+		        INNER JOIN TB_PLAN_GOODS TG ON G.GOODS_CD = TG.GOODS_CD 
+		        WHERE 1=1
+		        AND TG.PLAN_DTL_SQ = #{planDtlSq}
+		    ) CNT
 	</select>
 	
-	<!-- 기획전 코너 시퀀스 조회 -->
-	<select id="getPlanDtlSq" parameterType="Plan" resultType="Integer">
-		/* TsaMarketing.getPlanDtlSq */
-		SELECT LAST_INSERT_ID()	
-	</select>
+	<!-- 기획전 코너 저장 -->
+	<insert id="savePlanCornerGoods" parameterType="Plan">
+		/* TsaMarketing.savePlanCornerGoods */
+		INSERT INTO
+			      TB_PLAN_GOODS (
+			                PLAN_DTL_SQ
+				          , GOODS_CD
+				          , DISP_ORD
+				          , DEL_YN
+				          , REG_NO
+				          , REG_DT
+				          , UPD_DT
+				          , UPD_NO    
+			      )
+			   VALUES (
+			    	    #{planDtlSq}
+			          , #{goodsCd}
+			          <choose>
+				          <when test="dispOrd != null and dispOrd != ''">
+				          , #{dispOrd}
+				          </when>
+				          <otherwise>
+				          ,1
+				          </otherwise>
+			          </choose>
+			          , 'N'
+			          , #{regNo}
+			          , now()
+			          , now()
+			          , #{updNo}                                  
+			     )
+			   ON
+			      DUPLICATE KEY
+			   UPDATE
+			        DEL_YN = 'N'
+		          <choose>
+			          <when test="dispOrd != null and dispOrd != ''">
+			          , DISP_ORD = #{dispOrd}
+			          </when>
+			           <otherwise>
+			          ,DISP_ORD = 1
+			          </otherwise>
+		          </choose>
+		          , UPD_DT = now()
+		          , UPD_NO = #{updNo}                                  
+	</insert>
+	
+	
+	
 </mapper>
 
 

+ 28 - 16
src/main/webapp/WEB-INF/views/marketing/PlanCornerListForm.html

@@ -81,20 +81,23 @@
 					<button type="button" class="btn btn-Right btn-default btn-lg"onclick="fnGoodsExcelUpload();">엑셀상품추가</button>
 					<button type="button" class="btn btn-default btn-lg" onclick="cfnDownloadSampleFile('SF012');">엑셀상품추가 양식 다운로드</button>
 					<button type="button" class="btn btn-default btn-lg" onclick="fnOpenGoodsPopup();">상품추가</button>
-					<!-- 상품조회 팝업 -->
-					<button type="button" class="btn btn-default btn-lg"onclick="fnDispOrdChange();">순서변경</button>
-					<!-- 전시후관리 순서변경 -->
+					<!-- <button type="button" class="btn btn-default btn-lg"onclick="fnDispOrdChange();">순서변경</button> -->
 					<button type="button" class="btn btn-danger btn-lg"	onclick="fnDeleteGoods();">선택삭제</button>
 				</div>
 			</div>
 
 			<div id="gridListGoods"	style="width: 100%; max-height: 350px; height: 350px;" class="ag-theme-balham lh60"></div>
+			<ul class="panelBar">
+				<li class="center">
+					<div class="tablePaging" id="planListPagination"></div>
+				</li>
+			</ul>
 		</div>
 
 	</div>
 </div>
-
-	<script th:inline="javascript">
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
 /*<![CDATA[*/
 
 	var planInfo = [[${planInfo}]];
@@ -138,8 +141,8 @@
 			cellEditor: 'dateTimer',
 			cellEditorParams: { maxlength: 8, required: true },
 		},
-		{headerName: "등록자"			, field:'regId'				, width:120, cellClass: 'text-center', editable: false },
-		{headerName: "수정자"			, field:'updId'				, width:120, cellClass: 'text-center', editable: false }
+		{headerName: "등록자"			, field:'regNm'				, width:120, cellClass: 'text-center', editable: false },
+		{headerName: "수정자"			, field:'updNm'				, width:120, cellClass: 'text-center', editable: false }
 	];
 
 	var gridOptionsCorner = gagaAgGrid.getGridOptions(columnDefsCorner);
@@ -192,18 +195,21 @@
 	// 행추가
 	$('#btnAddRow').on('click', function() {
 		var allData = gagaAgGrid.getAllRowData(gridOptionsCorner);
+		console.log(allData.length);
+		console.log(allData[0]);
+		console.log(allData[0].crud);
 		var planSq = $('#planCornerListForm input[name=planSq]').val();
 		var stdt = planInfo.dispStdt.split(" ");
 		var eddt = planInfo.dispEddt.split(" ");
 
-		if (allData.length > 0 && typeof allData[0].crud != 'undefined') {
+		if (allData.length > 0 && typeof allData[0].crud == 'undefined') {
 			mcxDialog.alert('추가 된 코너를 저장 후 코너를 추가하세요.');
 			return;
 		} else {
 			var actionUrl = '/marketing/planning/corner/plandtlsq?planSq=' + planSq;
 			$.get(actionUrl
 						, function(planDtlSq) {
-								var data = { planDtlSq: planDtlSq, planSq:planSq, cornerNm:'',cornerDispType: 4, startSearchDate: _today, startSearchTime: stdt[1], endSearchDate: eddt[0], endSearchTime: eddt[1]};
+								var data = { planDtlSq: planDtlSq, planSq:planSq, cornerNm:'',cornerDispType: 4 + '컷', startSearchDate: _today, startSearchTime: stdt[1], endSearchDate: eddt[0], endSearchTime: eddt[1]};
 								gagaAgGrid.addRowData(gridOptionsCorner, data, "planDtlSq");
 					});
 		}
@@ -225,7 +231,7 @@
 			sureBtnClick: function() {
 				var jsonData = JSON.stringify(selectData);
 
-				gagajf.ajaxJsonSubmit('/marketing/plan/corner/delete', jsonData, fnCornerSearch);
+				gagajf.ajaxJsonSubmit('/marketing/planning/corner/delete', jsonData, fnCornerSearch);
 			}
 		});
 	});
@@ -334,7 +340,7 @@
 			sureBtnText: "확인",
 			sureBtnClick: function() {
 				var jsonData = JSON.stringify(changeData);
-				gagajf.ajaxJsonSubmit('/marketing/plan/corner/save', jsonData, fnCornerSearch);
+				gagajf.ajaxJsonSubmit('/marketing/planning/corner/save', jsonData, fnCornerSearch);
 			}
 		});
 	}
@@ -369,12 +375,18 @@
 			, editable : true, cellEditor: 'numericCellEditor'
 			, valueFormatter: function(params) { return params.value.addComma(); }
 		},
-		{headerName: "재고"		, field:'currStockQty'			, width:80 , cellClass: 'text-center'
+		{headerName: "재고"		, field:'stockQtySum'			, width:80 , cellClass: 'text-center'
 			, cellRenderer: function(params) {return !gagajf.isNull(params.value) ? params.value : '0'; }
 		},
 		{headerName: "할인율(%)"		, field:'dcRate'		, width:80 , cellClass: 'text-center'},
 		{headerName: "TAG가"		, field:'tagPrice'		, width:100, cellClass: 'text-right'
-			, valueFormatter: function(params) { return params.value.addComma(); }
+			,valueFormatter: function(params) {
+				if(params.value && params.value > 0) {
+					return params.value.addComma();
+				} else {
+					return '0';
+				}
+			}
 		},
 		{headerName: "정상가"		, field:'listPrice'		, width:100, cellClass: 'text-right' , hide : true
 			, valueFormatter: function(params) { return params.value.addComma(); }
@@ -448,7 +460,7 @@
 					,excelFileNm : result.excelFileNm
 					};
 		var jsonData = JSON.stringify(data);
-		gagajf.ajaxJsonSubmit('/marketing/plan/corner/goods/excelupload', jsonData, fnCornerSearch);
+		gagajf.ajaxJsonSubmit('/marketing/planning/corner/goods/excelupload', jsonData, fnCornerSearch);
 	}
 
 	var fnOpenGoodsPopup = function() {
@@ -497,7 +509,7 @@
 			sureBtnText: "확인",
 			sureBtnClick: function() {
 				var jsonData = JSON.stringify(oldGoodsList);
-				gagajf.ajaxJsonSubmit('/marketing/plan/corner/goods/save', jsonData, fnCornerSearch);
+				gagajf.ajaxJsonSubmit('/marketing/planning/corner/goods/save', jsonData, fnCornerSearch);
 			}
 		});
 	}
@@ -514,7 +526,7 @@
 		gagaAgGrid.createGrid('gridListCorner', gridOptionsCorner);
 		gagaAgGrid.createGrid('gridListGoods', gridOptionsGoods);
 
-		//fnCornerSearch();
+		fnCornerSearch();
 	});
 
 

+ 67 - 35
src/main/webapp/WEB-INF/views/marketing/PlanWebDetailPopupForm.html

@@ -717,44 +717,44 @@
 			multiCate.push(item.cateNo);
 		});
 		
-		
-		let data = {
-				 multiBrand : multiBrand
-				,brandList : allBrandData
-				,multiCate : multiCate
-				,CateList : allCateData
-			    ,mode : $('#planWebRegisterForm input[name=mode]').val()
-			    ,planSq : $('#planWebRegisterForm input[name=planSq]').val()
-				,planGb	: $('#planWebRegisterForm select[name=planGb]').val()
-				,templateType :	$('#planWebRegisterForm select[name=templateType]').val()
-				,frontGb : $('#planWebRegisterForm select[name=frontGb]').val()
-				,planNm : $('#planWebRegisterForm input[name=planNm]').val()
-				,startSearchDate : $('#planWebRegisterForm input[name=startSearchDate]').val()
-				,startSearchHour : $('#planWebRegisterForm input[name=startSearchHour]').val()
-				,startSearchMin : $('#planWebRegisterForm input[name=startSearchMin]').val()
-				,endSearchDate : $('#planWebRegisterForm input[name=endSearchDate]').val()
-				,endSearchHour : $('#planWebRegisterForm input[name=endSearchHour]').val()
-				,endSearchMin : $('#planWebRegisterForm input[name=endSearchMin]').val()
-				,dispStdt : $('#planWebRegisterForm input[name=dispStdt]').val()
-				,dispEddt : $('#planWebRegisterForm input[name=dispEddt]').val()
-				,dtlTitle1 : $('#planWebRegisterForm input[name=dtlTitle1]').val()
-				,cornerNmDispYn :  $('#planWebRegisterForm select[name=cornerNmDispYn]').val()
-				,openYn :  $('#planWebRegisterForm select[name=openYn]').val()
-				,siteCd :$('#planWebRegisterForm select[name=siteCd]').val()
-				,dispOrd : $('#planWebRegisterForm input[name=dispOrd]').val()
-				,replyYn : $('#planWebRegisterForm select[name=replyYn]').val()
-				,mainPimg :$('#planWebRegisterForm input[name=mainPimg]').val()
-				,mainMimg : $('#planWebRegisterForm input[name=mainMimg]').val()
-				,fsrcPc :  $('#planWebRegisterForm input[name=fsrcPc]').val()
-				,fsrcMobile : $('#planWebRegisterForm input[name=fsrcMobile]').val()
-			}	
-		
 		// 기획전 등록
 		if (formId == '#planWebRegisterForm') {
 			mcxDialog.confirm('등록 하시겠습니까?', {
 				cancelBtnText: "취소",
 				sureBtnText: "확인",
 				sureBtnClick: function() {
+					
+					let data = {
+							 multiBrand : multiBrand
+							,brandList : allBrandData
+							,multiCate : multiCate
+							,CateList : allCateData
+						    ,mode : $('#planWebRegisterForm input[name=mode]').val()
+						    ,planSq : $('#planWebRegisterForm input[name=planSq]').val()
+							,planGb	: $('#planWebRegisterForm select[name=planGb]').val()
+							,templateType :	$('#planWebRegisterForm select[name=templateType]').val()
+							,frontGb : $('#planWebRegisterForm select[name=frontGb]').val()
+							,planNm : $('#planWebRegisterForm input[name=planNm]').val()
+							,startSearchDate : $('#planWebRegisterForm input[name=startSearchDate]').val()
+							,startSearchHour : $('#planWebRegisterForm input[name=startSearchHour]').val()
+							,startSearchMin : $('#planWebRegisterForm input[name=startSearchMin]').val()
+							,endSearchDate : $('#planWebRegisterForm input[name=endSearchDate]').val()
+							,endSearchHour : $('#planWebRegisterForm input[name=endSearchHour]').val()
+							,endSearchMin : $('#planWebRegisterForm input[name=endSearchMin]').val()
+							,dispStdt : $('#planWebRegisterForm input[name=dispStdt]').val()
+							,dispEddt : $('#planWebRegisterForm input[name=dispEddt]').val()
+							,dtlTitle1 : $('#planWebRegisterForm input[name=dtlTitle1]').val()
+							,cornerNmDispYn :  $('#planWebRegisterForm select[name=cornerNmDispYn]').val()
+							,openYn :  $('#planWebRegisterForm select[name=openYn]').val()
+							,siteCd :$('#planWebRegisterForm select[name=siteCd]').val()
+							,dispOrd : $('#planWebRegisterForm input[name=dispOrd]').val()
+							,replyYn : $('#planWebRegisterForm select[name=replyYn]').val()
+							,mainPimg :$('#planWebRegisterForm input[name=mainPimg]').val()
+							,mainMimg : $('#planWebRegisterForm input[name=mainMimg]').val()
+							,fsrcPc :  $('#planWebRegisterForm input[name=fsrcPc]').val()
+							,fsrcMobile : $('#planWebRegisterForm input[name=fsrcMobile]').val()
+						}	
+					
 					var jsonData =  JSON.stringify(data);
 					gagajf.ajaxJsonSubmit("/marketing/planning/webdetail/create", jsonData, fnPlanWebDetailCallBack); 
 					uifnPopupClose('planWebRegisterFormDiv');
@@ -767,13 +767,45 @@
 				cancelBtnText: "취소",
 				sureBtnText: "확인",
 				sureBtnClick: function() {
+					
+					let data = {
+							 multiBrand : multiBrand
+							,brandList : allBrandData
+							,multiCate : multiCate
+							,CateList : allCateData
+						    ,mode : $('#planWebUpdateForm input[name=mode]').val()
+						    ,planSq : $('#planWebUpdateForm input[name=planSq]').val()
+							,planGb	: $('#planWebUpdateForm select[name=planGb]').val()
+							,templateType :	$('#planWebUpdateForm select[name=templateType]').val()
+							,frontGb : $('#planWebUpdateForm select[name=frontGb]').val()
+							,planNm : $('#planWebUpdateForm input[name=planNm]').val()
+							,startSearchDate : $('#planWebUpdateForm input[name=startSearchDate]').val()
+							,startSearchHour : $('#planWebUpdateForm input[name=startSearchHour]').val()
+							,startSearchMin : $('#planWebUpdateForm input[name=startSearchMin]').val()
+							,endSearchDate : $('#planWebUpdateForm input[name=endSearchDate]').val()
+							,endSearchHour : $('#planWebUpdateForm input[name=endSearchHour]').val()
+							,endSearchMin : $('#planWebUpdateForm input[name=endSearchMin]').val()
+							,dispStdt : $('#planWebUpdateForm input[name=dispStdt]').val()
+							,dispEddt : $('#planWebUpdateForm input[name=dispEddt]').val()
+							,dtlTitle1 : $('#planWebUpdateForm input[name=dtlTitle1]').val()
+							,cornerNmDispYn :  $('#planWebUpdateForm select[name=cornerNmDispYn]').val()
+							,openYn :  $('#planWebUpdateForm select[name=openYn]').val()
+							,siteCd :$('#planWebUpdateForm select[name=siteCd]').val()
+							,dispOrd : $('#planWebUpdateForm input[name=dispOrd]').val()
+							,replyYn : $('#planWebUpdateForm select[name=replyYn]').val()
+							,mainPimg :$('#planWebUpdateForm input[name=mainPimg]').val()
+							,mainMimg : $('#planWebUpdateForm input[name=mainMimg]').val()
+							,fsrcPc :  $('#planWebUpdateForm input[name=fsrcPc]').val()
+							,fsrcMobile : $('#planWebUpdateForm input[name=fsrcMobile]').val()
+						}	
+					
+					
 					var actionUrl = '/marketing/plan/webdetail/update';
-
-					gagajf.ajaxFormSubmit(actionUrl, formId, function() {
+					var jsonData =  JSON.stringify(data);
+					gagajf.ajaxJsonSubmit(actionUrl, jsonData, fnPlanWebDetailCallBack); 
 						uifnPopupClose('planWebRegisterFormDiv');
 						fnPlanListSearch();
 						//fnPlanWebDetailClose();
-					});
 				}
 			});
 		}