Forráskód Böngészése

상품에 배송비정책코드 적용

eskim 5 éve
szülő
commit
bfd1e4e86f

+ 1 - 0
style24.scm/src/main/java/com/style24/persistence/domain/Goods.java

@@ -45,6 +45,7 @@ public class Goods extends TscBaseDomain {
 	private String supplyCompCd;		//공급업체코드
 	private String supplyGoodsCd;		//공급업체상품코드(원코드)
 	private String ageGrpCd;		//상품연령대(공통코드 G023)
+	private String delvFeeCd;	//배송비정책코드
 	private int delvFee;		//배송비
 	private int minOrdAmt;		//무료배송비최소구매금액
 	private float pntPrate;		//포인트적립율(PC)

+ 1 - 0
style24.scm/src/main/java/com/style24/persistence/domain/GoodsHst.java

@@ -42,6 +42,7 @@ public class GoodsHst extends TscBaseDomain {
 	private String supplyCompCd;		//공급업체코드
 	private String supplyGoodsCd;		//공급업체상품코드(원코드)
 	private String ageGrpCd;		//상품연령대(공통코드 G023)
+	private String delvFeeCd;	//배송비정책코드
 	private int delvFee;		//배송비
 	private int minOrdAmt;		//무료배송비최소구매금액
 	private float pntPrate;		//포인트적립율(PC)

+ 13 - 11
style24.scm/src/main/java/com/style24/persistence/mybatis/shop/TssGoods.xml

@@ -523,8 +523,9 @@
 		     , G.SUPPLY_COMP_CD
 		     , G.SUPPLY_GOODS_CD
 		     , G.AGE_GRP_CD
-		     , G.DELV_FEE
-		     , G.MIN_ORD_AMT
+		     , G.DELV_FEE_CD
+		     , D.DELV_FEE
+		     , D.MIN_ORD_AMT
 		     , G.PNT_PRATE
 		     , G.PNT_MRATE
 		     , G.SELL_FEE_RATE
@@ -565,6 +566,8 @@
 		INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
 		LEFT OUTER JOIN TB_GOODS_IMG GI ON G.GOODS_CD = GI.GOODS_CD
 		                                AND G.MAIN_COLOR_CD = GI.COLOR_CD
+		LEFT OUTER JOIN TB_DELV_FEE_POLICY D ON G.SUPPLY_COMP_CD = D.SUPPLY_COMP_CD
+		                                     AND G.DELV_FEE_CD =  D.DELV_FEE_CD
 		WHERE 1 = 1 
 		<choose>
 		<when test="goodsCd != null and goodsCd != ''">
@@ -687,8 +690,7 @@
 		      , SUPPLY_COMP_CD
 		      , SUPPLY_GOODS_CD
 		      , AGE_GRP_CD
-		      , DELV_FEE
-		      , MIN_ORD_AMT
+		      , DELV_FEE_CD
 		      , PNT_PRATE
 		      , PNT_MRATE
 		      , SELL_FEE_RATE
@@ -740,8 +742,7 @@
 		     , SUPPLY_COMP_CD      
 		     , SUPPLY_GOODS_CD     
 		     , AGE_GRP_CD          
-		     , DELV_FEE            
-		     , MIN_ORD_AMT         
+		     , DELV_FEE_CD
 		     , PNT_PRATE           
 		     , PNT_MRATE           
 		     , SELL_FEE_RATE       
@@ -830,6 +831,9 @@
 		<if test="giftPackYn != null and giftPackYn != ''" >
 		    , GIFT_PACK_YN = #{giftPackYn}
 		</if>
+		<if test="delvFeeCd != null and delvFeeCd != ''" >
+		    , DELV_FEE_CD = #{delvFeeCd}
+		</if>
 		WHERE GOODS_CD = #{goodsCd}
 	</update>
 	
@@ -1105,8 +1109,7 @@
 		  , SUPPLY_COMP_CD
 		  , SUPPLY_GOODS_CD
 		  , AGE_GRP_CD
-		  , DELV_FEE
-		  , MIN_ORD_AMT
+		  , DELV_FEE_CD
 		  , PNT_PRATE
 		  , PNT_MRATE
 		  , SELL_FEE_RATE
@@ -1146,8 +1149,7 @@
 		  , #{supplyCompCd}
 		  , #{supplyGoodsCd}
 		  , #{ageGrpCd}
-		  , #{delvFee}
-		  , #{minOrdAmt}
+		  , #{delvFeeCd}
 		  , #{pntPrate}
 		  , #{pntMrate}
 		  , #{sellFeeRate}
@@ -1199,7 +1201,7 @@
 		  , DC_RATE = #{dcRate}
 		  , GOODS_STAT = #{goodsStat}
 		  , GOODS_GB = #{goodsGb}
-		  , MIN_ORD_AMT = #{minOrdAmt}
+		  , DELV_FEE_CD = #{delvFeeCd}
 		  , PNT_PRATE = #{pntPrate}
 		  , PNT_MRATE = #{pntMrate}
 		  , FORMAL_GB = #{formalGb}

+ 13 - 0
style24.scm/src/main/java/com/style24/persistence/mybatis/shop/TssRenderer.xml

@@ -346,5 +346,18 @@
 		AND CD_GB = 'G072'
 		AND USE_YN = 'Y'
 	</select>
+	
+	<!-- 업체별 배송비정책 목록 -->
+	<select id="getSupplyDeliveryFeePolicyList" parameterType="String" resultType="CommonCode">
+		/* TsaRenderer.getSupplyDeliveryFeePolicyList */
+		SELECT DELV_FEE_CD AS CD
+			 , CONCAT(MIN_ORD_AMT,'/',DELV_FEE) AS CD_NM
+		FROM TB_DELV_FEE_POLICY
+		WHERE 1=1
+		AND SUPPLY_COMP_CD = #{supplyCompCd}
+		AND USE_YN = 'Y'
+		ORDER BY DELV_FEE_CD
+	</select>
+	
 
 </mapper>

+ 9 - 0
style24.scm/src/main/java/com/style24/scm/biz/dao/TssRendererDao.java

@@ -213,5 +213,14 @@ public interface TssRendererDao {
 	 */
 	Collection<CommonCode> getColorGrpCdRgbList();
 
+	/**
+	 * 업체별 배송비정책 목록
+	 *
+	 * @param supplyCompCd - 업체코드
+	 * @return 배송비정책 목록
+	 * @author eskim
+	 * @since 2020. 11. 24
+	 */
+	Collection<CommonCode> getSupplyDeliveryFeePolicyList(String supplyCompCd);
 
 }

+ 10 - 0
style24.scm/src/main/java/com/style24/scm/biz/service/TssRendererService.java

@@ -474,4 +474,14 @@ public class TssRendererService {
 		return rendererDao.getColorGrpCdRgbList();
 	}
 
+	/**
+	 * 배송비정책 목록
+	 * @param supplyCompCd - 공급업체코드
+	 * @return 배송비정책 목록
+	 * @author eskim
+	 * @since 2020. 11. 24
+	 */
+	public Collection<CommonCode> getSupplyDeliveryFeePolicyList(String supplyCompCd) {
+		 return rendererDao.getSupplyDeliveryFeePolicyList(supplyCompCd);
+	}
 }

+ 12 - 0
style24.scm/src/main/java/com/style24/scm/biz/web/TssRendererController.java

@@ -190,4 +190,16 @@ public class TssRendererController extends TssBaseController {
 //		return rendererService.getAflinkList(afChannel);
 //	}
 
+	/**
+	 * 배송비정책 목록
+	 * @param supplyCompCd - 공급업체코드
+	 * @return
+	 * @author eskim
+	 * @since 2020. 11. 25
+	 */
+	@GetMapping("/delvFee/list/{supplyCompCd}")
+	@ResponseBody
+	public Collection<CommonCode> getDeliveryFeeList(@PathVariable String supplyCompCd) {
+		return rendererService.getSupplyDeliveryFeePolicyList(supplyCompCd);
+	}
 }

+ 51 - 48
style24.scm/src/main/webapp/WEB-INF/views/goods/GoodsDetailForm.html

@@ -159,7 +159,7 @@
 										</td>
 									</tr>
 									<tr>
-										<td rowspan="11">&nbsp;</td>
+										<td rowspan="9">&nbsp;</td>
 										<th>시즌<em class="required" title="필수"></em></th>
 										<td >
 											<select  name="seasonCd" id="seasonCd">
@@ -248,10 +248,24 @@
 											<button type="button" class="btn btn-success btn-lg" id="btnGoodsItemkindChange">품목변경</button>
 											</th:block>
 										</td>
+										<td colspan="2">
+										</td>
+									</tr>
+									<tr>
+										<th>배송비정책<em class="required" title="필수"></em></th>
+										<td>
+											<select name="delvFeeCd">
+											</select>
+											<input type="hidden" id="delvFeeCdOrg" name="delvFeeCdOrg"/>
+										</td>
 										<th>기본배송비</th>
 										<td>
 											<input type="text" class="w100 aR" id="delvFee" name="delvFee"  disabled="disabled"/> 원
 										</td>
+										<th>무료배송비기준</th>
+										<td>
+											<input type="text" class="w100 aR" id="minOrdAmt" name="minOrdAmt" disabled="disabled"/> 원
+										</td>
 									</tr>
 									<tr>
 										<th>PC포인트<em class="required" title="필수"></em></th>
@@ -270,10 +284,7 @@
 											<label class="rdoBtn"><input type="radio" name="preMpntUsableYn" id="preMpntUsableYnN" value="N"/>N</label>
 											<input type="hidden" id="preMpntUsableYnOrg" name="preMpntUsableYnOrg"/>
 										</td>
-										<th>무료배송비기준<em class="required" title="필수"></em></th>
-										<td>
-											<input type="text" class="w100 aR" id="minOrdAmt" name="minOrdAmt" data-valid-type="numeric" maxlength="10"/> 원
-											<input type="hidden" id="minOrdAmtOrg" name="minOrdAmtOrg"/>
+										<td colspan="2">
 										</td>
 									</tr>
 									<tr>
@@ -666,7 +677,6 @@
 			$('#goodsDetailForm input[name=pntMrate]').val(result.pntMrate);
 			$('#goodsDetailForm input[name=pntMrateOrg]').val(result.pntMrate);
 			$('#goodsDetailForm input[name=minOrdAmt]').val(result.minOrdAmt.addComma());
-			$('#goodsDetailForm input[name=minOrdAmtOrg]').val(result.minOrdAmt);
 			$('#goodsDetailForm input[name=minOrdQty]').val(result.minOrdQty);
 			$('#goodsDetailForm input[name=minOrdQtyOrg]').val(result.minOrdQty);
 			$('#goodsDetailForm input[name=maxOrdQty]').val(result.maxOrdQty);
@@ -677,6 +687,9 @@
 			$('#goodsDetailForm input[name=goodsType]').val(result.goodsType);
 			$("#goodsDetailForm").find("#goodsTypeNm").html(result.goodsTypeNm);
 			
+			cfnCreateCombo('/renderer/delvFee/list/' + result.supplyCompCd, $('#goodsDetailForm select[name=delvFeeCd]'), "[선택]", result.delvFeeCd);
+			$('#goodsDetailForm input[name=delvFeeCdOrg]').val(result.delvFeeCd);
+			
 			//상품상세
 			// 공지내용. Summernote에 값 세팅
 			gagaSn.setContents('#goodsPcTopDesc', result.goodsPcTopDesc);
@@ -1073,6 +1086,17 @@
 			return;
 		}
 
+		//시즌
+		if(gagajf.isNull($("#goodsDetailForm select[name=seasonCd]").val())){
+			mcxDialog.alertC("시즌을 선택해 주세요.", {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$("#goodsDetailForm select[name=seasonCd]").focus();
+				}
+			});
+			return;
+		}
+		
 		//성별
 		if(gagajf.isNull($("#goodsDetailForm select[name=sexGb]").val())){
 			mcxDialog.alertC("성별을 선택해 주세요.", {
@@ -1083,13 +1107,13 @@
 			});
 			return;
 		}
-
-		//시즌
-		if(gagajf.isNull($("#goodsDetailForm select[name=seasonCd]").val())){
-			mcxDialog.alertC("시즌을 선택해 주세요.", {
+		
+		// 상품구분
+		if(gagajf.isNull($("#goodsDetailForm select[name=goodsGb]").val())){
+			mcxDialog.alertC("상품구분을 선택해 주세요.", {
 				sureBtnText: "확인",
 				sureBtnClick: function() {
-					$("#goodsDetailForm select[name=seasonCd]").focus();
+					$("#goodsDetailForm select[name=goodsGb]").focus();
 				}
 			});
 			return;
@@ -1144,6 +1168,18 @@
 			});
 			return false;
 		}
+		
+		// 배송비구분
+		if(gagajf.isNull($("#goodsDetailForm select[name=delvFeeCd]").val())){
+			mcxDialog.alertC("배송비정책을 선택해 주세요.", {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$("#goodsDetailForm select[name=delvFeeCd]").focus();
+				}
+			});
+			return;
+		}
+		
 		// 포인트
 		if ( gagajf.isNull($("#goodsDetailForm input[name=pntPrate]").val())) {
 			mcxDialog.alertC("PC 포인트를 입력해 주세요.", {
@@ -1258,28 +1294,6 @@
 			return false;
 		}
 
-		// 무료배송비
-		if ( gagajf.isNull($("#goodsDetailForm input[name=minOrdAmt]").val())) {
-			mcxDialog.alertC("무료 배송 금액을 입력해 주세요.", {
-				sureBtnText: "확인",
-				sureBtnClick: function() {
-					$("#goodsDetailForm input[name=minOrdAmt]").focus();
-				}
-			});
-			return false;
-		}
-		if (Number($("#goodsDetailForm input[name=minOrdAmt]").val().removeComma()) <= 0) {
-			mcxDialog.alertC("무료 배송 금액을 입력해 주세요.", {
-				sureBtnText: "확인",
-				sureBtnClick: function() {
-					$("#goodsDetailForm input[name=minOrdAmt]").focus();
-				}
-			});
-			return false;
-		}
-
-		//if (optCheck) return false;
-
 		idx = 0;
 
 		//재고 옵션 관련 확인
@@ -1288,8 +1302,6 @@
 		$("#optionList tr").each(function() {
 			var optCd1 = $(this).find("input[name=optCd1]").val();
 			var optCd2 = $(this).find("input[name=optCd2]").val();
-			var hidOptCd1 = $(this).find("input[name=hidOptCd1]").val();
-			var hidOptCd2 = $(this).find("input[name=hidOptCd2]").val();
 			var baseStockQty = $(this).find("input[name=baseStockQty]").val();
 			var hidBaseStockQty = $(this).find("input[name=hidBaseStockQty]").val();
 			var dispOrd = $(this).find("input[name=dispOrd]").val();
@@ -1339,14 +1351,6 @@
 				return false;
 			}
 			
-			if (optCd1 != hidOptCd1){
-				$("#goodsDetailForm input[name=chStockDataYn]").val('Y');
-			}
-			
-			if (optCd2 != hidOptCd2){
-				$("#goodsDetailForm input[name=chStockDataYn]").val('Y');
-			}
-			
 			if (editCurrStockQty != currStockQty){
 				$("#goodsDetailForm input[name=chStockDataYn]").val('Y');
 			}
@@ -1591,10 +1595,6 @@
 		if ($("#goodsDetailForm input[name=dayMaxOrdQtyOrg]").val() != $("#goodsDetailForm input[name=dayMaxOrdQty]").val()){
 			return true;
 		}
-		//무료배송기준
-		if ($("#goodsDetailForm input[name=minOrdAmtOrg]").val() != $("#goodsDetailForm input[name=minOrdAmt]").val().removeComma()){
-			return true;
-		}
 		//유통구분
 		if ($("#goodsDetailForm input[name=distributionGbOrg]").val() != $("#goodsDetailForm select[name=distributionGb]").val()){
 			return true;
@@ -1615,7 +1615,10 @@
 		if ($("#goodsDetailForm input[name=returnableYnOrg]").val() != $("input[name=returnableYn]:checked").val()){
 			return true;
 		}
-		
+		// 배송비정책
+		if ($("#goodsDetailForm input[name=delvFeeCdOrg]").val() != $("#goodsDetailForm select[name=delvFeeCd]").val()){
+			return true;
+		}
 		return false;
 	}
 

+ 1 - 1
style24.scm/src/main/webapp/WEB-INF/views/goods/GoodsDetailSizeStockForm.html

@@ -120,7 +120,7 @@
 			<td><input type="text" class="w100p aC" name="editCurrStockQty" th:value="${goodsSize.currStockQty}" maxlength="10" data-valid-type="numeric" th:disabled="${goods.selfGoodsYn == 'Y'}"/>
 				<input type="hidden" name="currStockQty" th:value="${goodsSize.currStockQty}"/>
 			</td>
-			<td><input type="text" class="w100p aC"  name=baseStockQty th:value="${goodsSize.baseStockQty}" maxlength="7" data-valid-type="integer">
+			<td><input type="text" class="w100p aC"  name="baseStockQty" th:value="${goodsSize.baseStockQty}" maxlength="7" data-valid-type="integer">
 				<input type="hidden" name="hidBaseStockQty" th:value="${goodsSize.baseStockQty}"/>
 			</td>
 			<td><input type="text" class="w100p aC" name="saleStockQty" th:value="${goodsSize.saleStockQty}" maxlength="17" data-valid-type="numeric" th:disabled="disabled"/>

+ 54 - 5
style24.scm/src/main/webapp/WEB-INF/views/goods/GoodsListForm.html

@@ -52,8 +52,8 @@
 					<tr>
 						<th>업체/브랜드<em class="required" title="필수"></em></th>
 						<td colspan="5">
-							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnY" value="Y" th:checked="${sessionInfo.roleCd} != 'G001_B000'"/>자사</label>
-							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnN" value="N" th:checked="${sessionInfo.roleCd} == 'G001_B000'"/>입점</label>
+							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnY" value="Y" th:checked="${sessionInfo.roleCd} != 'G001_B000'" th:disabled="${sessionInfo.roleCd == 'G001_B000'}"/>자사</label>
+							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnN" value="N" th:checked="${sessionInfo.roleCd} == 'G001_B000'" th:disabled="${sessionInfo.roleCd == 'G001_E000'}"/>입점</label>
 							<select name="supplyCompCd" id="supplyCompCd">
 								<option value="" th:if="${sessionInfo.roleCd} != 'G001_B000'">[전체]</option>
 								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
@@ -328,6 +328,20 @@
 								<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('pntMrate')" >적용</button>
 							</td>
 						</tr>
+						<tr>
+							<th>배송지정책</th>
+							<td colspan="3">
+								<select name="statSupplyCompCd" id="statSupplyCompCd">
+									<option value="" >[선택]</option>
+									<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+								</select>
+								<select name="delvFeeCdC" id="delvFeeCdC" >
+									<option value="">[선택]</option>
+								</select>
+								<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('delvFeeCd')" >적용</button>
+							</td>
+							<td colspan="4">
+						</tr>
 					</table>
 				</li>
 			</ul>
@@ -643,7 +657,7 @@
 	}
 
 	//상품상태 변경시
-	var fnChangeGoodsState = function(proc){
+	var fnChangeGoodsState = function(proc){debugger;
 
 		var objId = '#'+proc+"C";
 		if (proc == "goodsTnm"){
@@ -695,6 +709,7 @@
 		var pntPrateVal = '';
 		var pntMrateVal = '';
 		var giftPackYnVal = '';
+		var delvFeeCdVal = '';
 
 		if (proc == "goodsStat") {
 			goodsStatVal = $(objId).val();
@@ -768,7 +783,12 @@
 			}
 			pntMrateVal = $(objId).val();
 		}else if (proc == "giftPackYn") {
-			giftPackYnVal = $(objId).val();	
+			giftPackYnVal = $(objId).val();
+		}else if (proc == "delvFeeCd") {debugger;
+			if (!fnGoodsDelFeeCdCheck(selectedData)){
+				return;
+			}
+			delvFeeCdVal = $(objId).val();	
 		}else{
 			return;
 		}
@@ -796,6 +816,7 @@
 							,pntPrate : pntPrateVal
 							,pntMrate : pntMrateVal
 							,giftPackYn : giftPackYnVal
+							,delvFeeCd : delvFeeCdVal
 							,procJob : proc
 							};
 
@@ -806,6 +827,28 @@
 		});
 	}
 	
+	// 배송비정책 관련 확인
+	var fnGoodsDelFeeCdCheck = function(selectedData){debugger;
+		
+		var statSupplyCompCd = $('#searchForm select[name=statSupplyCompCd]').val();
+		
+		$.each(selectedData, function(idx, item) {
+
+			if (item.supplyCompCd != statSupplyCompCd){debugger;
+
+				mcxDialog.alertC(item.goodsCd +" 상품은 배송지 정책업체와 상이합니다. ",{
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						gridOptions.api.setFocusedCell(idx, "goodsCd", null);
+					}
+				});
+				return false;
+			}
+		});
+		
+		return true;	
+	}
+	
 	// 입점 상품상태 변경시
 	var fnChangeGoodsStateSelfNo = function(proc){
 
@@ -909,6 +952,12 @@
 		
 	});
 	
+	// 상태일괄변경 업체변경시
+	$('#searchForm select[name=statSupplyCompCd]').on('change', function() {
+		$("#searchForm select[name=delvFeeCdC] option:gt(0)").remove();
+		cfnCreateCombo('/renderer/delvFee/list/' + $('#searchForm select[name=statSupplyCompCd]').val(), $('#searchForm select[name=delvFeeCdC]'), "[선택]");
+	});
+	
 	$(document).ready(function() {
 
 		cfnCreateCalendar('#sellTerms', 'stDate', 'edDate', true, '등록일', 'X');
@@ -927,7 +976,7 @@
 		if(sessRoleCd == "G001_B000") {
 			
 			$("#searchForm select[name=supplyCompCd]").val([[${sessionInfo.supplyCompCd}]]);
-			$("#searchForm select[name=supplyCompCd]").attr("readonly", true);
+			//$("#searchForm select[name=supplyCompCd]").attr("disabled", true);
 			//$("select[disabled]").addClass("formControl");
 
 			$('#searchForm').find('#multiBrand').empty();