Przeglądaj źródła

Merge remote-tracking branch 'origin/jmh' into develop

card007 4 lat temu
rodzic
commit
7b82e2ae5a

+ 9 - 0
src/main/java/com/style24/admin/biz/dao/TsaShoplinkerDao.java

@@ -240,4 +240,13 @@ public interface TsaShoplinkerDao {
 	 */
 	Collection<GagaMap> getInvoiceExcelList(ShoplinkerInvoice shoplinkerInvoice);
 
+	/**
+	 * 샵링커 주문수집 목록 - 제휴몰업로드 메모 저장 
+	 *
+	 * @param extmallOrder
+	 * @return
+	 * @author jmh
+	 * @since 2021. 11. 17
+	 */
+	void updateExtmallUploadMemo(ExtmallOrder extmallOrder);
 }

+ 3 - 3
src/main/java/com/style24/admin/biz/service/TsaStockService.java

@@ -87,18 +87,18 @@ public class TsaStockService {
 	 */
 	public void getGoodsSizeStockExcelList(GoodsSearch goodsSearch, String excelFilenameWithPath) {
 		// 헤더 title 설정
-		String[] listTitles = {"브랜드명","상품명", "품목", "상품상태", "상품코드",  "옵션코드", "색상" , "사이즈", "품절여부",
+		String[] listTitles = {"브랜드명","상품명", "품목", "상품상태", "상품코드",  "옵션코드", "색상" , "사이즈", "SKUModelNo(WMS)", "품절여부",
 			"재고", "안전재고","출고대기", "판매가능재고"};
 
 		// DB 처리 시 사용되는 파라미터명(셀명) 설정
-		String[] cellNames = { "BRAND_ENM", "GOODS_NM", "ITEMKIND_NM","GOODS_STAT_NM","GOODS_CD", "OPT_CD", "OPT_CD1","OPT_CD2", "SOLDOUT_YN",
+		String[] cellNames = { "BRAND_ENM", "GOODS_NM", "ITEMKIND_NM","GOODS_STAT_NM","GOODS_CD", "OPT_CD", "OPT_CD1","OPT_CD2", "SKU_MODEL_NO", "SOLDOUT_YN",
 			"CURR_STOCK_QTY", "BASE_STOCK_QTY", "SALE_STOCK_QTY", "ABLE_STOCK_QTY"};
 
 		String[] cellTypes = {GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
 			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
 			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
 			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
-			GagaExcelConstants.CellType.CHAR_CENTER.name(),
+			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
 			GagaExcelConstants.CellType.CHAR_RIGHT.name(), GagaExcelConstants.CellType.CHAR_RIGHT.name(),
 			GagaExcelConstants.CellType.CHAR_RIGHT.name(), GagaExcelConstants.CellType.CHAR_RIGHT.name()
 		};

+ 19 - 3
src/main/java/com/style24/admin/biz/web/TsaOcmController.java

@@ -353,10 +353,20 @@ public class TsaOcmController extends TsaBaseController {
 		String resultMsg = "";
 		int userNo = TsaSession.getInfo().getUserNo();
 		int wateCnt = orderOcmService.getExtmallOrderExceluploadWateCnt(userNo);
-		if( 0 == wateCnt) {
+		int uploadTmpCnt = orderOcmService.getExtmallOrderExceluploadTmpCnt(userNo);	// 엑셀업로드건수
+		if( 0 == wateCnt && 0 < uploadTmpCnt) {
+			// 주문등록 시작된 시간 기록(세션이 살아있는 동안 결과페이지에서 이 시간 기준으로 등록된 데이터 보여주기 위함)
+			TsaSession.setAttribute("extmallOrdDtTime", GagaDateUtil.getTodayDateTime());
+			
 			resultMsg = orderOcmService.saveExtmallorder(extmallOrder);
+			
+			orderOcmService.deleteExtmallOrderUploadTmpList(userNo);
 		}else {
-			resultMsg = "자신이 먼저 업로드한 건이 현재 처리중입니다. 완료 된 후 진행해주세요. (남은 대기건 수: " + wateCnt+")";
+			if( 0 == uploadTmpCnt ) {
+				resultMsg = "엑셀업로드를 먼저 진행해주세요.";
+			}else {
+				resultMsg = "자신이 먼저 업로드한 건이 현재 처리중입니다. 완료 된 후 진행해주세요. (남은 대기건 수: " + wateCnt+")";
+			}
 		}
 		
 		return super.ok(resultMsg);
@@ -375,7 +385,13 @@ public class TsaOcmController extends TsaBaseController {
 	public Collection<ExtmallOrder> getExtmallOrderUploadSecondList() {
 		ExtmallOrder extmallOrder = new ExtmallOrder();
 		extmallOrder.setRegNo(TsaSession.getInfo().getUserNo());
-
+		extmallOrder.setResultDtTime(TsaSession.getAttribute("extmallOrdDtTime"));	// 마지막 주문등록된 시작시간
+		
+		if( StringUtils.isBlank(TsaSession.getAttribute("extmallOrdDtTime"))) {
+			TsaSession.setAttribute("extmallOrdDtTime", GagaDateUtil.getTodayDateTime());	// 조회안되도록
+			extmallOrder.setResultDtTime(TsaSession.getAttribute("extmallOrdDtTime"));
+		}
+		
 		return orderOcmService.getExtmallOrderUploadSecondList(extmallOrder);
 	}
 

+ 17 - 1
src/main/java/com/style24/admin/biz/web/TsaShoplinkerController.java

@@ -44,6 +44,7 @@ import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.TscPageRequest;
 import com.style24.persistence.domain.CommonCode;
 import com.style24.persistence.domain.Extmall;
+import com.style24.persistence.domain.ExtmallOrder;
 import com.style24.persistence.domain.ShoplinkerGoods;
 import com.style24.persistence.domain.ShoplinkerInvoice;
 import com.style24.persistence.domain.ShoplinkerOrder;
@@ -905,7 +906,22 @@ log.info(" #### SHOPLINKER CHKE 1 - "+runMap.getRunCnt()+" | "+runMap.getSidOver
 		return runMap;
 	}
 
-
+	/**
+	 * 샵링커 주문수집 목록 - 제휴몰업로드 메모 저장 
+	 * 
+	 * @param
+	 * @return
+	 * @throws Exception
+	 * @author jmh
+	 * @since 2021. 11. 17
+	 */
+	@PostMapping("/extmall/order/memo/save")
+	@ResponseBody
+	public GagaResponse updateExtmallUploadMemoSave(@RequestBody ExtmallOrder extmallOrder) {
+		admShoplinkerService.updateExtmallUploadMemo(extmallOrder);
+		
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
 
 	/*
 	 *

+ 2 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaStock.xml

@@ -385,6 +385,7 @@
 		              , X.OPT_CD
 		              , X.OPT_CD1
 		              , X.OPT_CD2
+		              , X.SKU_MODEL_NO
 		              , X.SOLDOUT_YN
 		              , X.CURR_STOCK_QTY
 		              , X.BASE_STOCK_QTY
@@ -406,6 +407,7 @@
 		                          , ST.OPT_CD
 		                          , ST.OPT_CD1
 		                          , ST.OPT_CD2
+		                          , ST.SKU_MODEL_NO
 		                          , ST.SOLDOUT_YN
 		                          , ST.CURR_STOCK_QTY
 		                          , ST.BASE_STOCK_QTY

+ 10 - 5
src/main/webapp/WEB-INF/views/goods/GoodsDetailForm.html

@@ -35,6 +35,11 @@
 				<input type="hidden" id="goodsType" name="goodsType" />
 				<input type="hidden" id="goodsComposeList" name="goodsComposeList" />
 				<input type="hidden" id="repGoodsCd" name="repGoodsCd" /> <!-- 대표상품(딜 가격) -->
+				<!-- 사용자검색어, 검색어 부분 (사용안함 히든처리) 21.11.22 -->
+				<input type="hidden" class="w60p" id="goodsSnm1" name="goodsSnm1"></input>
+				<input type="hidden" id="goodsSnm1Org" name="goodsSnm1Org"/>
+				<input type="hidden" id="goodsSnm" name="goodsSnm"></input>
+				
 			<div class="panelContent">
 				<table class="frmStyle">
 					<colgroup>
@@ -101,7 +106,7 @@
 									</colgroup>
 									<tbody>
 									<tr>
-										<td rowspan="4" style="text-align:center">
+										<td rowspan="6" style="text-align:center">
 										<img id="goodsImgUrl" src="" width="130px"/>
 										<input type="hidden" name="sysImgNm" id="sysImgNm" />
 										</td>
@@ -120,6 +125,7 @@
 											<input type="hidden" id="goodsNmOrg" name="goodsNmOrg"/>
 										</td>
 									</tr>
+									<!-- 21.11.22 사용안함으로 변경, 상단 히든으로 정의(기존데이터용)
 									<tr>
 										<th>사용자검색어</th>
 										<td colspan="5">
@@ -132,12 +138,10 @@
 										<th>검색어</th>
 										<td colspan="5">
 											<textarea class="textareaR2 w100p" id="goodsSnmTxt" name="goodsSnmTxt" disabled="disabled"></textarea>
-											<!-- <input type="text" class="w100p" id="goodsSnmTxt" name="goodsSnmTxt" disabled="disabled"></input> -->
 											<input type="hidden" id="goodsSnm" name="goodsSnm"></input>
 										</td>
-									</tr>
+									</tr> -->
 									<tr>
-										<td class="aC cRed" style="font-weight:bold;"><span id="goodsTypeNm"></span></td> <!-- 상품타입노출 -->
 										<th>정상/이월 구분<em class="required" title="필수"></em></th>
 										<td>
 											<label class="rdoBtn" th:if="${formalGbList}" th:each="oneData, status : ${formalGbList}" ><input type="radio" id="formalGb" name="formalGb" th:value="${oneData.cd}" th:text="${oneData.cdNm}" /></label>
@@ -159,7 +163,6 @@
 										</td>
 									</tr>
 									<tr>
-										<td rowspan="14">&nbsp;</td>
 										<th>시즌<em class="required" title="필수"></em></th>
 										<td >
 											<select  name="seasonCd" id="seasonCd">
@@ -217,6 +220,7 @@
 										</td>
 									</tr>
 									<tr class="chk_deal">
+										<td class="aC cRed" style="font-weight:bold;"><span id="goodsTypeNm"></span></td> <!-- 상품타입노출 -->
 										<th>상품연령대</th>
 										<td>
 											<select  name="ageGrpCd" id="ageGrpCd">
@@ -235,6 +239,7 @@
 										<td><span id="priceUpdDtTxt"></span></td>
 									</tr>
 									<tr>
+										<td rowspan="12">&nbsp;</td>
 										<th>정상가<em class="required" title="필수"></em></th>
 										<td>
 											<input type="text" class="w80p aR" id="listPrice" name="listPrice" maxlength="10" data-valid-type="numeric"/> 원

+ 15 - 0
src/main/webapp/WEB-INF/views/goods/GoodsListForm.html

@@ -427,6 +427,16 @@
 		{headerName: 'No', width: 60, cellClass: 'text-center',
 			valueGetter: function(params) { return cfnGridNumner('searchForm',params.node.rowIndex, 'A');}
 		},
+		{
+			headerName		: "미리보기"
+			, field			: "goodsCd"
+			, width			: 100
+			, cellClass		: 'text-center'
+			, cellRenderer: function (params) {
+				var retStr = '<button type="button" class="btn btn-base btn-sm" onclick="btnGoodsDetailPreview(\'' + params.data.goodsCd + '\');">미리보기</button>';
+				return retStr;
+			}
+		},
 		{headerName: "이미지", field: "sysImgNm", width: 100, height: 60, cellClass: 'text-center'
 			,cellRenderer: function(params) {
 				return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '?RS=60" alt="" onclick="cfnOpenImagePreViewPopup(\'goodsImgView\', \''+ _goodsUrl+ "/" + params.value +'\')" onerror="this.src=\'/image/no.png\';"/>';
@@ -1251,6 +1261,11 @@
 		cfnCreateDelvPolicyCombo( $('#searchForm input[name=statSupplyCompCd]').val(), $('#searchForm select[name=delvFeeCdC]'), "[선택]");
 	}
 	
+	// 미리보기
+	var btnGoodsDetailPreview = function(cd){
+		cfnOpenFrontGoodsPopup(cd);
+	}
+	
 	// 상품이미지 미리보기 레이어에서 창 종료 이벤트
 	$(document).on("mouseleave","#goodsImgView",function(){
 		$("#goodsImgView").remove();

+ 14 - 4
src/main/webapp/WEB-INF/views/goods/GoodsPriceReservePopupForm.html

@@ -31,7 +31,7 @@
 					</colgroup>
 					<tr>
 						<th>상품예약가격<em class="required" title="필수"></em></th>
-						<td><input type="text" class="w100p aR" id="resGoodsPrice" name="resGoodsPrice" maxlength="10" data-valid-type="numeric" /></td>
+						<td><input type="text" class="w100p aR" id="resGoodsPrice" name="resGoodsPrice" maxlength="10" data-valid-type="pinteger" /></td>
 						<th>예약일시<em class="required" title="필수"></em></th>
 						<td>
 							<input name="applyStYMD" id="applyStYMD" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="예약시작일" th:value="${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}"/>
@@ -152,7 +152,17 @@
 			});
 			return false;
 		}
-
+		
+		if( 1 > $("#goodsPriceRsvtForm input[name=resGoodsPrice]").val()) {
+			mcxDialog.alertC("상품 예약가격을 입력하세요.",{
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$("#goodsPriceRsvtForm input[name=resGoodsPrice]").focus();
+				}
+			});
+			return false;
+		}
+		
 		var fromDate = $('#goodsPriceRsvtForm input[name=applyStYMD]').val();
 		var toDate = $('#goodsPriceRsvtForm input[name=applyEdYMD]').val();
 
@@ -188,7 +198,7 @@
 		
 		var optCheck = false;
 		$.each(allRowData, function(index, item) {
-			if (item.listPrice < $("#goodsPriceRsvtForm input[name=resGoodsPrice]").val()){
+			if (item.listPrice < $("#goodsPriceRsvtForm input[name=resGoodsPrice]").val().removeComma()){
 				optCheck = true;
 				mcxDialog.alertC("가격예약 상품중 정상가가 예약가 보다 낮은 상품이 상품이 존재합니다.<br/>확인해 주세요", {
 					sureBtnText: "확인",
@@ -265,7 +275,7 @@
 					arrEndGoodsPrice.push(item.currPrice);
 				});
 				
-				var data = {resGoodsPrice : $('#goodsPriceRsvtForm input[name=resGoodsPrice]').val()
+				var data = {resGoodsPrice : $('#goodsPriceRsvtForm input[name=resGoodsPrice]').val().removeComma()
 							, applyStdt : $('#goodsPriceRsvtForm input[name=applyStdt]').val()
 							, applyEddt : $('#goodsPriceRsvtForm input[name=applyEddt]').val()
 							, arrGoodsCd : arrGoodsCd

+ 6 - 0
src/main/webapp/WEB-INF/views/shoplinker/ShoplinkerOrderDetailForm.html

@@ -304,6 +304,12 @@
 							<th>등록일시</th>
 							<td class="aL padL10" th:text="${extOrderInfo.regDt}"></td>
 						</tr>
+						<tr>
+							<th>CS메모</th>
+							<td colspan="3" class="aL padL10" th:text="${extOrderInfo.csMemo}"></td>
+							<th>CS메모수정일시</th>
+							<td class="aL padL10" th:text="${extOrderInfo.csMemoUpdDt }"></td>
+						</tr>
 					</tbody>
 				</table>
 			</div>

+ 34 - 30
src/main/webapp/WEB-INF/views/shoplinker/ShoplinkerOrderForm.html

@@ -283,6 +283,21 @@
 		{headerName: "쇼핑몰 명", field: "mallName", width: 130, cellClass: 'text-center'},
 		{headerName: "주문자명", field: "orderName", width: 130, cellClass: 'text-center'},
 		{headerName: "주문자연락처", field: "orderCel", width: 130, cellClass: 'text-center'},
+		{headerName: "CS메모",    headerClass:'text-point',	field: "csMemo",		width: 200,	cellClass: 'text-left',editable: true,
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 1000, required: true },
+			cellStyle : function(params){
+				var color = "";
+					color = '#ff96689c';
+				return { 'text-color': color};
+			}
+		},			
+		{headerName: "",				field: "",	width: 90,	cellClass: 'text-center',
+			cellRenderer: function(params) {
+				var btnText = '<a href="javascript:void(0);"  class="btn btn-success btn-ssm">저장</a>';
+				return btnText;
+			}	
+		},
 		{headerName: "배송상태[발주확인]", field: "baesongStatus", width: 130, cellClass: 'text-center'},
 		{headerName: "주문 상품번호", field: "orderProductId", width: 130, cellClass: 'text-center'},
 		{headerName: "샵링커 상품번호", field: "shoplinkerProductId", width: 130, cellClass: 'text-center'},
@@ -331,38 +346,27 @@
 
 	// Cell click
 	gridOptions.onCellClicked = function(event) {
-		if (event.colDef.field != 'extmallId')
-			return;
-
-		$('#detailForm select[name=vendorId]').val(event.data.vendorId);
-		$('#detailForm input[name=extmallId]').val(event.data.extmallId);
-		$('#detailForm input[name=extmallUserId]').val(event.data.extmallUserId);
-		$('#detailForm input[name=extmallNm]').val(event.data.extmallNm);
-		$('#detailForm select[name=supplyCompCd]').val(event.data.supplyCompCd);
-		$('#detailForm input[name=sellStoreCd]').val(event.data.sellStoreCd);
-		$('#detailForm input[name=stockSellRate]').val(event.data.stockSellRate);
-		$('#detailForm input[name=priceAcceptRate]').val(event.data.priceAcceptRate);
-
-		if (event.data.dwdpYn == 'Y') {
-			$('#detailForm input:radio[name=dwdpYn]').eq(0).trigger('click');
-		} else {
-			$('#detailForm input:radio[name=dwdpYn]').eq(1).trigger('click');
-		}
-
-		if (event.data.cnclsmsSendYn == 'Y') {
-			$('#detailForm input:radio[name=cnclsmsSendYn]').eq(0).trigger('click');
-		} else {
-			$('#detailForm input:radio[name=cnclsmsSendYn]').eq(1).trigger('click');
-		}
-
-		if (event.data.useYn == 'Y') {
-			$('#detailForm input:radio[name=useYn]').eq(0).trigger('click');
-		} else {
-			$('#detailForm input:radio[name=useYn]').eq(1).trigger('click');
+		if(event.colDef.field == ''){
+			if(gagajf.isNull(event.data.csMemo)){
+				mcxDialog.alert("내용을 입력해주세요.");
+			}else{
+				var params = {};
+				params.csMemo = event.data.csMemo;
+				params.agentOrderId = event.data.shoplinkerOrderId;
+				params.extmallOrderId = event.data.mallOrderId;
+					
+				mcxDialog.confirm('저장(수정) 하시겠습니까?', {
+					cancelBtnText: "취소",
+					sureBtnText: "확인",
+					sureBtnClick: function(){
+						var jsonData = JSON.stringify(params);
+						gagajf.ajaxJsonSubmit('/shoplinker/extmall/order/memo/save', jsonData, fnGoodsListSearch);
+					}
+				});
+			}
 		}
 	}
-
-
+	
 	//페이징
 	$('#searchForm select[name=pageSize]').on('change', function() {
 		$("#searchForm input[name=pageNo]").val('1');

+ 13 - 11
src/main/webapp/WEB-INF/views/stock/GoodsSizeStockForm.html

@@ -199,7 +199,15 @@ x			</div>
 			valueGetter: function(params) { return cfnGridNumner('goodsSizeStockForm',params.node.rowIndex, 'A');}
 		},
 		{headerName: "브랜드명", field: "brandEnm", width: 130, cellClass: 'text-center'},
-		{headerName: "상품명", field: "goodsNm", width: 200, cellClass: 'text-left'},
+		{headerName: "상품명", field: "goodsNm", width: 200, cellClass: 'text-left',
+			cellRenderer: function(params) {
+				if (params.data.sizeSoldoutYn == "Y"){
+					return '<a href="javascript:void(0);" style="color:red">' + params.value + '</a>';
+				}else{
+					return '<a href="javascript:void(0);">' + params.value + '</a>';	
+				}
+			}
+		},
 		{headerName: "품목", field: "itemkindNm", width: 180, cellClass: 'text-left',
 			cellRenderer: function (params) {
 				if (gagajf.isNull( params.value)){
@@ -214,17 +222,11 @@ x			</div>
 			valueFormatter: function (params) { return gagaAgGrid.lookupValue(goodsStatList, params.value); },
 			valueParser: function (params) { return gagaAgGrid.lookupKey(goodsStatList, params.newValue); }
 		},
-		{headerName: "상품코드", field: "goodsCd", width: 140, cellClass: 'text-center',
-			cellRenderer: function(params) {
-				if (params.data.sizeSoldoutYn == "Y"){
-					return '<a href="javascript:void(0);" style="color:red">' + params.value + '</a>';
-				}else{
-					return '<a href="javascript:void(0);">' + params.value + '</a>';	
-				}
-			}	
-		},
+		{headerName: "상품코드", field: "goodsCd", width: 140, cellClass: 'text-center'},			
+		{headerName: "옵션코드", field: "optCd", width: 100, cellClass: 'text-center'},
 		{headerName: "색상", field: "optCd1", width: 100, cellClass: 'text-center'},
 		{headerName: "사이즈", field: "optCd2", width: 100, cellClass: 'text-center'},
+		{headerName: "SKUModelNo(WMS)", field: "skuModelNo", width: 140, cellClass: 'text-center'},
 		{headerName: "품절여부", field: "soldoutYn", width: 100, cellClass: 'text-center',
 			cellStyle : function(params){
 				var color = "";
@@ -267,7 +269,7 @@ x			</div>
 	// Row Click
 	gridOptions.onCellClicked = function(event) {
 		var goodsCd = event.data.goodsCd;
-		if (event.colDef.field == "goodsCd"){
+		if (event.colDef.field == "goodsNm"){
 			cfnOpenGoodsDetailPopup('U',goodsCd);
 		}
 	}