소스 검색

Merge branch 'develop' of http://112.172.147.34:4936/style24/style24.admin into develop

jsshin 5 년 전
부모
커밋
5130dd4d75

+ 10 - 0
src/main/java/com/style24/admin/biz/dao/TsaGoodsDao.java

@@ -886,6 +886,16 @@ public interface TsaGoodsDao {
 	 */
 	Collection<Goods> getGoodsDetailOrderGradeList(Goods goods);
 
+	/**
+	 * 상품 안전인증 조회
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2021. 05. 10
+	 */
+	GoodsSafeNo getGoodsDetailSafe(Goods goods);
+	
 	/**
 	 * 상품 구매등급 삭제
 	 *

+ 38 - 10
src/main/java/com/style24/admin/biz/service/TsaGoodsService.java

@@ -630,6 +630,20 @@ public class TsaGoodsService {
 	public Collection<Goods> getGoodsDetailOrderGradeList(Goods goods) {
 		return goodsDao.getGoodsDetailOrderGradeList(goods);
 	}
+	
+	/**
+	 * 상품 안전인증 조회
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2021. 05. 10
+	 */
+	public GoodsSafeNo getGoodsDetailSafe(Goods goods) {
+		return goodsDao.getGoodsDetailSafe(goods);
+	}
+	
+	
 
 	/**
 	 * 구성상품 목록
@@ -665,32 +679,46 @@ public class TsaGoodsService {
 	 * @since 2020. 12. 07
 	 */
 	@Transactional("shopTxnManager")
-	public void saveGoodsDetailCertNum(Goods goods) {
+	public void saveGoodsDetailCertNum(GoodsSafeNo goodsSafeNo) {
 		try {
-			if (StringUtils.isNotBlank(goods.getCertNum())) {
-				if ("해당없음".equals(goods.getCertNum())) {
-					GoodsSafeNo goodsSafeNo = new GoodsSafeNo();
-					goodsSafeNo.setGoodsCd(goods.getGoodsCd());
-					goodsSafeNo.setCertNum(goods.getCertNum());
+			//인증대상
+			if ("G083_1".equals(goodsSafeNo.getCertTargetGb())) {
+				
+				//인증형태 (방송통신, 위해) or 인증타입 - 공급자적합성
+				if ("G084_4".equals(goodsSafeNo.getCertFormGb()) || "G084_5".equals(goodsSafeNo.getCertFormGb()) || "G081_3".equals(goodsSafeNo.getCertType())) {
+					goodsSafeNo.setCertDt("");
+//					goodsSafeNo.setCertNum("");
+					goodsSafeNo.setCertState("");
+					goodsSafeNo.setCertDiv("");
+					goodsSafeNo.setCertOrganName("");
 					goodsSafeNo.setRegNo(TsaSession.getInfo().getUserNo());
 					goodsSafeNo.setUpdNo(TsaSession.getInfo().getUserNo());
 					goodsDao.saveGoodsSafeNo(goodsSafeNo);
 				}else {
-					GagaMap result = safetyKoreaApi.getKoreaCertifyDetail(goods.getCertNum());
+					GagaMap result = safetyKoreaApi.getKoreaCertifyDetail(goodsSafeNo.getCertNum());
 					if (result != null || !StringUtil.isNullOrEmpty(result.get("certNum").toString())) {
-						GoodsSafeNo goodsSafeNo = new GoodsSafeNo();
-						goodsSafeNo.setGoodsCd(goods.getGoodsCd());
 						goodsSafeNo.setCertDt(result.get("certDt").toString());
-						goodsSafeNo.setCertNum(result.get("certNum").toString());
 						goodsSafeNo.setCertState(result.get("certState").toString());
 						goodsSafeNo.setCertDiv(result.get("certDiv").toString());
 						goodsSafeNo.setCertOrganName(result.get("certOrganName").toString());
 						goodsSafeNo.setRegNo(TsaSession.getInfo().getUserNo());
 						goodsSafeNo.setUpdNo(TsaSession.getInfo().getUserNo());
 						goodsDao.saveGoodsSafeNo(goodsSafeNo);
+					}else {
+						throw new IllegalStateException(message.getMessage("FAIL_1001"));
 					}
 				}
+			}else {	//인증대상 그외 - 인증처리 안해도 됨
+				goodsSafeNo.setCertDt("");
+//				goodsSafeNo.setCertNum("");
+				goodsSafeNo.setCertState("");
+				goodsSafeNo.setCertDiv("");
+				goodsSafeNo.setCertOrganName("");
+				goodsSafeNo.setRegNo(TsaSession.getInfo().getUserNo());
+				goodsSafeNo.setUpdNo(TsaSession.getInfo().getUserNo());
+				goodsDao.saveGoodsSafeNo(goodsSafeNo);
 			}
+			
 		} catch (Exception e) {
 			e.printStackTrace();
 		}

+ 23 - 2
src/main/java/com/style24/admin/biz/web/TsaGoodsController.java

@@ -47,6 +47,7 @@ import com.style24.persistence.domain.GoodsNaverLowestPrice;
 import com.style24.persistence.domain.GoodsNotiInfo;
 import com.style24.persistence.domain.GoodsPriceRes;
 import com.style24.persistence.domain.GoodsResSell;
+import com.style24.persistence.domain.GoodsSafeNo;
 import com.style24.persistence.domain.GoodsSearch;
 import com.style24.persistence.domain.GoodsTnmRes;
 import com.style24.persistence.domain.GoodsVideo;
@@ -798,6 +799,12 @@ public class TsaGoodsController extends TsaBaseController {
 		mav.addObject("distributionGbList", rendererService.getCommonCodeList("G065", "Y"));
 		// 상품연령대
 		mav.addObject("ageGrpCdList", rendererService.getAvailCommonCodeList("G023"));
+		// kc인증타입
+		mav.addObject("certTypeList", rendererService.getAvailCommonCodeList("G081"));
+		// kc인증대상구분
+		mav.addObject("certTargetGbList", rendererService.getAvailCommonCodeList("G083"));
+		// kc인증형태구분
+		mav.addObject("certFormGbList", rendererService.getAvailCommonCodeList("G084"));
 		// 년도
 		int toYear = Integer.parseInt(GagaDateUtil.getToday("yyyy")) - 4;
 		mav.addObject("styleYearList", rendererService.getYearList(toYear, 0, 5));
@@ -908,6 +915,20 @@ public class TsaGoodsController extends TsaBaseController {
 	public Collection<Goods> getGoodsDetailOrderGradeList(Goods goods) {
 		return goodsService.getGoodsDetailOrderGradeList(goods);
 	}
+	
+	/**
+	 * 상품 안전인증 조회
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2021. 05. 10
+	 */
+	@PostMapping("/detail/safe")
+	@ResponseBody
+	public GoodsSafeNo getGoodsDetailSafe(Goods goods) {
+		return goodsService.getGoodsDetailSafe(goods);
+	}
 
 	/**
 	 * 구성상품 목록
@@ -933,8 +954,8 @@ public class TsaGoodsController extends TsaBaseController {
 	 */
 	@PostMapping("/detail/certNum/save")
 	@ResponseBody
-	public GagaResponse saveGoodsDetailCertNum(@RequestBody Goods goods) {
-		goodsService.saveGoodsDetailCertNum(goods);
+	public GagaResponse saveGoodsDetailCertNum(@RequestBody GoodsSafeNo goodsSafeNo) {
+		goodsService.saveGoodsDetailCertNum(goodsSafeNo);
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
 

+ 0 - 34
src/main/java/com/style24/persistence/domain/MailTemplate.java

@@ -1,34 +0,0 @@
-package com.style24.persistence.domain;
-
-import com.style24.persistence.TscBaseDomain;
-
-import lombok.Data;
-
-/**
- * 색상 Domain
- *
- * @author csh9191
- * @since 2021. 01. 29.
- */
-
-@SuppressWarnings("serial")
-@Data
-public class MailTemplate extends TscBaseDomain{
-
-	//메일템플릿
-	private Integer mailtSq;		// 메일템플릿 일련번호
-	private Integer mailhfSq;		// 메일헤더푸터 일련번호
-	private String mailhfNm;		// 메일헤더푸터 타이틀명
-	private String mailhfGb;		// 메일헤더푸터 구분 H:헤더 F:푸터
-	private String mode;
-	private String mailhfContent;	// 메일헤더푸터 내용
-	private String useYn;			// 사용여부
-	private String regDt;			// 등록일시
-	private String updDt;			// 수정일시
-	
-	private String searchTxt;		//등로자 검색
-
-
-	}
-
-

+ 29 - 3
src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml

@@ -3107,10 +3107,13 @@
 		/* TsbGoods.saveGoodsSafeNo */
 		INSERT INTO TB_GOODS_SAFE_NO (
 		    GOODS_CD
+		  , CERT_TARGET_GB
+		  , CERT_FORM_GB
+		  , CERT_TYPE
 		  , CERT_NUM
+		  , CERT_STATE
 		  , CERT_DIV
 		  , CERT_ORGAN_NAME
-		  , CERT_STATE
 		  , CERT_DT
 		  , REG_NO
 		  , REG_DT
@@ -3119,10 +3122,13 @@
 		)
 		VALUES (
 		    #{goodsCd}
+		  , #{certTargetGb}
+		  , #{certFormGb}
+		  , #{certType}
 		  , #{certNum}
+		  , #{certState}
 		  , #{certDiv}
 		  , #{certOrganName}
-		  , #{certState}
 		  , #{certDt}
 		  , #{regNo}
 		  , NOW()
@@ -3130,7 +3136,10 @@
 		  , NOW()
 		)
 		ON DUPLICATE KEY UPDATE
-		       CERT_NUM = #{certNum}
+		       CERT_TARGET_GB = #{certTargetGb}
+		     , CERT_FORM_GB = #{certFormGb}
+		     , CERT_TYPE = #{certType}
+		     , CERT_NUM = #{certNum}
 		     , CERT_DIV = #{certDiv}
 		     , CERT_ORGAN_NAME = #{certOrganName}
 		     , CERT_STATE = #{certState}
@@ -3292,6 +3301,23 @@
 		)
 	</insert>
 	
+	<!-- 상품 안전인증 목록 -->
+	<select id="getGoodsDetailSafe" parameterType="Goods" resultType="GoodsSafeNo">
+		/* TsaGoods.getGoodsDetailSafe */
+		SELECT  GOODS_CD
+		      , CERT_TARGET_GB
+		      , CERT_FORM_GB
+		      , CERT_TYPE
+		      , CERT_NUM
+		      , CERT_STATE
+		      , CERT_DIV
+		      , CERT_ORGAN_NAME
+		      , CERT_DT
+		FROM TB_GOODS_SAFE_NO 
+		WHERE GOODS_CD = #{goodsCd}
+		ORDER BY GOODS_CD
+	</select>
+	
 	<!-- 광고 키워드 목록 -->
 	<select id="getAdKeywordList" parameterType="AdKeyword" resultType="AdKeyword">
 		/* TsaGoods.getAdKeywordList */

+ 141 - 40
src/main/webapp/WEB-INF/views/goods/GoodsDetailForm.html

@@ -78,7 +78,7 @@
 							<li><a href="#goodstab3">상품상세정보</a></li>
 							<li id="goodsNotiTab"><a href="#goodstab4">고시정보</a></li>
 							<li id="goodsComposeTab" style="display:none;"><a href="#goodstab5">구성상품</a></li>
-							<!-- <li><a href="#goodstab6">안전인증</a></li> -->
+							<li id="goodsSafeTab"><a href="#goodstab6">안전인증</a></li>
 							<li><a href="#goodstab7">변경이력</a></li>
 						</ul>
 					</div>
@@ -369,12 +369,6 @@
 										</td>
 									</tr>
 									<tr>
-										<!-- <th>안전인증번호</th>
-										<td>
-											<input type="text" class="w150" id="certNum" name="certNum"  maxlength="20"/>
-											<input type="hidden" id="certNumOrg" name="certNumOrg"/>
-											<button type="button" class="btn btn-success btn-lg" id="btnGoodsSafetyCertNum">안전인증</button>
-										</td> -->
 										<th>판매기간<em class="required" title="필수"></em></th>
 										<td colspan="3">
 											<input name="sellStYMD" id="sellStYMD" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="판매시작일" />
@@ -570,49 +564,71 @@
 							</div>
 							<!-- //TAB6 CONTENTS AREA -->
 						</li>
-						<!-- TAB6 : 이력정보 -->
-						<!-- <li class="tab" id="goodstab6">
-							TAB8 CONTENTS AREA
+						<!-- TAB6 : 안전인증 -->
+						<li class="tab" id="goodstab6">
 							<div class="panelStyle">
-								<table class="frmStyle" th:with="uploadGoodsUrl=${@environment.getProperty('upload.goods.view')},uxImgUrl=${@environment.getProperty('domain.uximage')}">
+								<table class="frmStyle">
 									<colgroup>
-										<col width="10%"/>
-										<col width="40%"/>
-										<col width="10%"/>
+										<col width="11%"/>
+										<col width="22%"/>
+										<col width="11%"/>
+										<col width="22%"/>
+										<col width="11%"/>
 										<col/>
 									</colgroup>
 									<tr>
 										<th>인증대상</th>
-										<td colspan="3"></td>
+										<td colspan="5">
+											<label class="rdoBtn" th:if="${certTargetGbList}" th:each="oneData, status : ${certTargetGbList}">
+												<input type="radio" name="certTargetGb" th:value="${oneData.cd}" th:text="${oneData.cdNm}"/>
+											</label>
+											<input type="hidden" id="orgCertTargetGb" name="orgCertTargetGb"/>
+										</td>
 									</tr>
 									<tr>	
 										<th>인증형태</th>
-										<td colspan="3"></td>
-									</tr>
-									<tr>	
+										<td>
+											<select  name="certFormGb" id="certFormGb" >
+												<option value="">[선택]</option>
+												<option th:if="${certFormGbList}" th:each="oneData, status : ${certFormGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+											</select>
+											<input type="hidden" id="orgCertformGb" name="orgCertformGb"/>
+										</td>
 										<th>인증타입</th>
-										<td colspan="3"></td>
-									</tr>
-									<tr>	
+										<td>
+											<select  name="certType" id="certType" >
+												<option value="">[선택]</option>
+												<option th:if="${certTypeList}" th:each="oneData, status : ${certTypeList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+											</select>
+											<input type="hidden" id="orgCertType" name="orgCertType"/>
+										</td>
 										<th>인증번호</th>
-										<td  colspan="3"></td>
+										<td>
+											<input type="text" class="w200" id="certNum" name="certNum"  maxlength="20"/>
+											<input type="hidden" id="certNumOrg" name="certNumOrg"/>
+											
+										</td>
 									</tr>
 									<tr>	
 										<th>인증상태</th>
-										<td></td>
-										<th>인증구분</th>
-										<td></td>
-									</tr>
-									<tr>	
+										<td><span id="certStateTxt"></span></td>
 										<th>인증기관</th>
-										<td></td>
+										<td><span id="certOrganNameTxt"></span></td>
 										<th>인증일</th>
-										<td></td>
+										<td><span id="certDtTxt"></span></td>
+									</tr>
+									<tr>
+										<th>인증구분</th>
+										<td colspan="5"><span id="certDivTxt"></span></td>
 									</tr>
 								</table>
+								<ul class="panelBar marT10">
+								<li class="right">
+								<button type="button" class="btn  btn-success btn-lg" id="btnGoodsSafetyCertNum">안전인증</button>
+								</li>
+								</ul>
 							</div>
-							//TAB5 CONTENTS AREA
-						</li> -->
+						</li>
 						<!-- //TAB7 : 이력정보 -->
 						<li class="tab" id="goodstab7">
 							<!-- TAB8 CONTENTS AREA -->
@@ -1110,12 +1126,14 @@
 			if ("G056_S" == result.goodsType){
 				if (result.selfGoodsYn == "Y") $('#goodsDetailForm #goodsComposeTab').css('display','block');
 				$('#goodsDetailForm #goodsNotiTab').css('display','none');
+				$('#goodsDetailForm #goodsSafeTab').css('display','none');
 				$('#goodsDetailForm input[name=sellFeeRate]').attr('readonly', true);
 				$('#goodsDetailForm input[name=listPrice]').attr('readonly', true);
 				$('#goodsDetailForm input[name=currPrice]').attr('readonly', true);
 			}else if ("G056_D" == result.goodsType){
 				if (result.selfGoodsYn == "Y") $('#goodsDetailForm #goodsComposeTab').css('display','block');
 				$('#goodsDetailForm #goodsNotiTab').css('display','none');
+				$('#goodsDetailForm #goodsSafeTab').css('display','none');
 				$('#goodsDetailForm input[name=sellFeeRate]').attr('readonly', true);
 			}
 			
@@ -1136,7 +1154,8 @@
 			fnGoodsDetailNotiInfoSearch(params);
 			//구매등급
 			fnGoodsDetailOrderGradeSearch(params);
-			
+			//안전인증
+			fnGoodsDetailSafeNoSearch();
 			//구성상품
 			if ("G056_S" == result.goodsType || "G056_D" == result.goodsType){
 				fnGoodsComposeListSearch(params);
@@ -1167,6 +1186,13 @@
 		cfnAjaxSubmit("/goods/detail/order/grade/list", "json", fnGoodsDetailOrderGradeSearchCallback, params);
 	}
 	
+	//안전인증
+	var fnGoodsDetailSafeNoSearch = function() {
+		var params = new Object();
+		params.goodsCd = $('#goodsDetailForm input[name=goodsCd]').val();
+		cfnAjaxSubmit("/goods/detail/safe", "json", fnGoodsDetailSafeNoSearchCallback, params);
+	}
+	
 	//구성상품
 	var fnGoodsComposeListSearch = function(params) {
 		if ("G056_S" == params.goodsType){	//세트
@@ -1229,6 +1255,33 @@
 		});
 	}
 
+	//안전인증 콜백
+	var fnGoodsDetailSafeNoSearchCallback = function(result){
+		if (result == null) return;
+			
+		if (result.certTargetGb == "G083_1"){
+			$("#goodsDetailForm input:radio[name=certTargetGb]:input[value='G083_1']").trigger('click');
+		}else if (result.certTargetGb == "G083_2"){
+			$("#goodsDetailForm input:radio[name=certTargetGb]:input[value='G083_2']").trigger('click');
+		}else if (result.certTargetGb == "G083_3"){
+			$("#goodsDetailForm input:radio[name=certTargetGb]:input[value='G083_3']").trigger('click');
+		}
+		$("#goodsDetailForm input[name=orgCertTargetGb]").val(result.certTargetGb);
+		$("#goodsDetailForm select[name=certFormGb]").val(result.certFormGb);
+		$("#goodsDetailForm input[name=orgCertFormGb]").val(result.certFormGb);
+		$("#goodsDetailForm select[name=certType]").val(result.certType);
+		$("#goodsDetailForm input[name=orgCertType]").val(result.certType);
+		$("#goodsDetailForm input[name=certNum]").val(result.certNum);
+		$("#goodsDetailForm input[name=orgCertNum]").val(result.certNum);
+		$('#goodsDetailForm').find('#certStateTxt').html(result.certState);
+		$('#goodsDetailForm').find('#certTargetGbTxt').html(result.certTargetGb);
+		
+		$('#goodsDetailForm').find('#certOrganNameTxt').html(result.certOrganName);
+		$('#goodsDetailForm').find('#certDivTxt').html(result.certDiv);
+		$('#goodsDetailForm').find('#certDtTxt').html(!gagajf.isNull(result.certDt) ? result.certDt.toDate("YYYYMMDD").format("YYYY-MM-DD") : '');
+
+	}
+	
 	//상품명 길이표시
 	$("#goodsDetailForm input[name=goodsNm]").bind('focus focusout input keyup keydown paste change', function () {
 		fnDataLengthCheck('goodsNm',200);
@@ -2302,25 +2355,73 @@
 	
 	// 안전인증
 	$("#btnGoodsSafetyCertNum").on("click", function(){
-/*
-		if($("#goodsDetailForm  input[name=certNum]").val() == $("#goodsDetailForm  input[name=certNumOrg]").val()){
-			mcxDialog.alert("안전인증번호가 변경되지 않았습니다.");
-			return false;
-		}
-*/
-		mcxDialog.confirm('안전인증번호를 변경 하시겠습니까?', {
+		
+		if (!fnGoodsSafetyCertNumCheck()) return false;
+
+		mcxDialog.confirm('안전인증정보(API)를 변경 하시겠습니까?', {
 			cancelBtnText: "취소",
 			sureBtnText: "확인",
 			sureBtnClick: function(){
 				var data = {  goodsCd : $('#goodsDetailForm input[name=goodsCd]').val()
+							, certTargetGb : $("#goodsDetailForm input[name=certTargetGb]:checked").val()
+							, certFormGb : $("#goodsDetailForm select[name=certFormGb]").val()
+							, certType : $("#goodsDetailForm select[name=certType]").val()
 							, certNum : $("#goodsDetailForm input[name=certNum]").val()
 							};
 				var jsonData = JSON.stringify(data);
-				gagajf.ajaxJsonSubmit('/goods/detail/certNum/save', jsonData );  //, fnGoodsDeailSearch
+				 gagajf.ajaxJsonSubmit('/goods/detail/certNum/save', jsonData, fnGoodsDetailSafeNoSearch);
 			}
 		});
 	});
 	
+	var fnGoodsSafetyCertNumCheck = function(){
+		
+		if(gagajf.isNull($("#goodsDetailForm input[name=certTargetGb]:checked").val())){
+			mcxDialog.alert("인증대상을 선택해 주세요.");
+			return false;
+		}
+		
+		// 인증대상이 아니면 스킵
+		if ("G083_1" != $("#goodsDetailForm  input[name=certTargetGb]").val()){
+			return true;
+		}
+		
+		if(gagajf.isNull($("#goodsDetailForm select[name=certFormGb]").val())){
+			mcxDialog.alertC("인증형태를 선택해 주세요.", {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$("#goodsDetailForm select[name=certFormGb]").focus();
+				}
+			});
+			return false;
+		}
+		
+		if(gagajf.isNull($("#goodsDetailForm select[name=certType]").val())){
+			mcxDialog.alertC("인증타입를 선택해 주세요.", {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$("#goodsDetailForm select[name=certType]").focus();
+				}
+			});
+			return false;
+		}
+		
+		//인증타입이 공급자적합성일 경우 인증번호 미입력
+		if( "G081_3" != $("#goodsDetailForm select[name=certType]").val()){
+			if(gagajf.isNull($("#goodsDetailForm input[name=certNum]").val())){
+				mcxDialog.alertC("인증번호를 선택해 주세요.", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$("#goodsDetailForm input[name=certNum]").focus();
+					}
+				});
+				return false;
+			}
+		}
+		
+		return true;
+	}
+	
 	// 상품구매등급 
 	var fnGoodsOrderGrade = function(){