Procházet zdrojové kódy

상품상세 안전인증 관련 수정

eskim před 5 roky
rodič
revize
c55924bb69

+ 12 - 1
src/main/java/com/style24/persistence/domain/GoodsSafeNo.java

@@ -14,12 +14,23 @@ import lombok.Data;
 @Data
 public class GoodsSafeNo extends TscBaseDomain {
 
+//	private String goodsCd;
+//	private String goodsNum;
+//	private String certNum;
+//	private String certState;
+//	private String certDiv;
+//	private String certOrganName;
+//	private String certDt;
+	
 	private String goodsCd;
-	private String goodsNum;
+	private String certTargetGb;
+	private String certFormGb;
+	private String certType;
 	private String certNum;
 	private String certState;
 	private String certDiv;
 	private String certOrganName;
 	private String certDt;
 
+
 }

+ 34 - 12
src/main/java/com/style24/persistence/mybatis/shop/TssGoods.xml

@@ -592,16 +592,12 @@
 		       AND A.NI_CLSF_CD = B.CD 
 		       AND B.CD_GB = 'G004') AS  NI_CLSF_NM
 		     , FN_GET_USER_NM(G.UPD_NO) AS UPD_NM
-		   --  , E.CERT_NUM
-		   --  , E.CERT_DT
-		   --  , E.CERT_ORGAN_NAME
 		     , DATE_FORMAT(G.SELL_STDT, '%Y%m%d%H%i%S') AS SELL_STDT
 		     , DATE_FORMAT(G.SELL_EDDT, '%Y%m%d%H%i%S') AS SELL_EDDT
 		FROM TB_GOODS G
 		INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_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
-		-- LEFT OUTER JOIN TB_GOODS_SAFE_NO E ON G.GOODS_CD = E.GOODS_CD
 		WHERE 1 = 1 
 		<choose>
 		<when test="goodsCd != null and goodsCd != ''">
@@ -2591,7 +2587,7 @@
 	
 	<!-- 상품이미지 변경 -->
 	<update id="updateFreeGoods" parameterType="FreeGoods">
-		/* TsaGoods.updateFreeGoods */
+		/* TssGoods.updateFreeGoods */
 		UPDATE TB_FREE_GOODS
 		SET GOODS_NM = #{goodsNm}
 		  , SYS_IMG_NM = #{sysImgNm}
@@ -2601,15 +2597,35 @@
 		WHERE PRODUCT_NO = #{productNo}
 	</update>
 	
+	<!-- 상품 안전인증 목록 -->
+	<select id="getGoodsDetailSafe" parameterType="Goods" resultType="GoodsSafeNo">
+		/* TssGoods.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>
+	
 	<!--  상품 안전인증번호 저장 -->
 	<insert id="saveGoodsSafeNo"  parameterType="GoodsSafeNo">
-		/* TsaGoods.saveGoodsSafeNo */
+		/* TssGoods.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
@@ -2618,10 +2634,13 @@
 		)
 		VALUES (
 		    #{goodsCd}
+		  , #{certTargetGb}
+		  , #{certFormGb}
+		  , #{certType}
 		  , #{certNum}
-		  , #{certDiv}
-		  , #{certOrganName}A
 		  , #{certState}
+		  , #{certDiv}
+		  , #{certOrganName}
 		  , #{certDt}
 		  , #{regNo}
 		  , NOW()
@@ -2629,7 +2648,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}
@@ -2640,7 +2662,7 @@
 	
 	<!-- 상품 모델 정보 -->
 	<select id="getGoodsModelInfo" parameterType="GoodsImg" resultType="GoodsImg">
-		/* TsaGoods.getGoodsModelInfo */
+		/* TssGoods.getGoodsModelInfo */
 		SELECT GOODS_CD
 		      , MODEL_INFO
 		FROM TB_GOODS_MODEL_INFO
@@ -2649,7 +2671,7 @@
 	
 	<!-- 상품 모델 정보 저장 -->
 	<insert id="saveGoodsModelInfo" parameterType="GoodsImg">
-		/* TsaGoods.saveGoodsModelInfo */
+		/* TssGoods.saveGoodsModelInfo */
 		INSERT INTO TB_GOODS_MODEL_INFO
 		    (GOODS_CD
 		   , MODEL_INFO

+ 10 - 0
src/main/java/com/style24/scm/biz/dao/TssGoodsDao.java

@@ -593,6 +593,16 @@ public interface TssGoodsDao {
 	 */
 	public void updateFreeGoods(FreeGoods freeGoods);
 	
+	/**
+	 * 상품 안전인증 조회
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2021. 05. 10
+	 */
+	GoodsSafeNo getGoodsDetailSafe(Goods goods);
+	
 	/**
 	 * 안전인증대상 상품 저장
 	 *

+ 38 - 17
src/main/java/com/style24/scm/biz/service/TssGoodsService.java

@@ -1990,7 +1990,7 @@ public class TssGoodsService {
 		goodsDao.createCategoryGoods(goods);
 
 		// 안전안증작업
-		saveGoodsDetailCertNum(goods);
+		// saveGoodsDetailCertNum(goods);  eskim 20210510
 
 		this.setGoodsRegResult(goods, goodsMass, procJob);
 
@@ -3454,6 +3454,18 @@ public class TssGoodsService {
 		goodsDao.updateFreeGoods(freeGoods);
 	}
 
+	/**
+	 * 상품 안전인증 조회
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2021. 05. 10
+	 */
+	public GoodsSafeNo getGoodsDetailSafe(Goods goods) {
+		return goodsDao.getGoodsDetailSafe(goods);
+	}
+	
 	/**
 	 * 안전인증번호 저장
 	 *
@@ -3463,31 +3475,40 @@ public class TssGoodsService {
 	 * @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());
-					goodsSafeNo.setRegNo(TssSession.getInfo().getUserNo());
-					goodsSafeNo.setUpdNo(TssSession.getInfo().getUserNo());
+			goodsSafeNo.setRegNo(TssSession.getInfo().getUserNo());
+			goodsSafeNo.setUpdNo(TssSession.getInfo().getUserNo());
+			//인증대상
+			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("");
 					goodsDao.saveGoodsSafeNo(goodsSafeNo);
-				} else {
-					GagaMap result = safetyKoreaApi.getKoreaCertifyDetail(goods.getCertNum());
+				}else {
+					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(TssSession.getInfo().getUserNo());
-						goodsSafeNo.setUpdNo(TssSession.getInfo().getUserNo());
 						goodsDao.saveGoodsSafeNo(goodsSafeNo);
+					}else {
+						throw new IllegalStateException(message.getMessage("FAIL_1001"));
 					}
 				}
+			}else {	//인증대상 그외 - 인증처리 안해도 됨
+				goodsSafeNo.setCertDt("");
+//				goodsSafeNo.setCertNum("");
+				goodsSafeNo.setCertState("");
+				goodsSafeNo.setCertDiv("");
+				goodsSafeNo.setCertOrganName("");
+				goodsDao.saveGoodsSafeNo(goodsSafeNo);
 			}
 		} catch (Exception e) {
 			e.printStackTrace();
@@ -3615,7 +3636,7 @@ public class TssGoodsService {
 		goodsDao.createCategoryGoods(goods);
 
 		// 안전안증작업
-		saveGoodsDetailCertNum(goods);
+		//saveGoodsDetailCertNum(goods); eskim 20210510
 	}
 
 	/**

+ 23 - 2
src/main/java/com/style24/scm/biz/web/TssGoodsController.java

@@ -34,6 +34,7 @@ import com.style24.persistence.domain.GoodsImg;
 import com.style24.persistence.domain.GoodsMass;
 import com.style24.persistence.domain.GoodsNotiInfo;
 import com.style24.persistence.domain.GoodsPriceRes;
+import com.style24.persistence.domain.GoodsSafeNo;
 import com.style24.persistence.domain.GoodsSearch;
 import com.style24.persistence.domain.NotiInfo;
 import com.style24.persistence.domain.Notice;
@@ -430,6 +431,12 @@ public class TssGoodsController extends TssBaseController {
 		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));
@@ -1289,6 +1296,20 @@ public class TssGoodsController extends TssBaseController {
 		goodsService.updateFreeGoods(freeGoods);
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
+	
+	/**
+	 * 상품 안전인증 조회
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2021. 05. 10
+	 */
+	@PostMapping("/detail/safe")
+	@ResponseBody
+	public GoodsSafeNo getGoodsDetailSafe(Goods goods) {
+		return goodsService.getGoodsDetailSafe(goods);
+	}
 
 	/**
 	 * 상품 안전인증번호 저장
@@ -1300,8 +1321,8 @@ public class TssGoodsController extends TssBaseController {
 	 */
 	@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"));
 	}
 

+ 160 - 13
src/main/webapp/WEB-INF/views/goods/GoodsDetailForm.html

@@ -79,7 +79,8 @@
 							<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>
 					<!-- //TABS NAVI -->
@@ -554,9 +555,74 @@
 							</div>
 							<!-- //TAB6 CONTENTS AREA -->
 						</li>
-						<!-- //TAB7 : 추가정보 -->
-						<!-- TAB5 : 이력정보 -->
+						<!-- //TAB5 : 구성정보 -->
+						<!-- TAB6 : 안전인증 -->
 						<li class="tab" id="goodstab6">
+							<div class="panelStyle">
+								<table class="frmStyle">
+									<colgroup>
+										<col width="11%"/>
+										<col width="22%"/>
+										<col width="11%"/>
+										<col width="22%"/>
+										<col width="11%"/>
+										<col/>
+									</colgroup>
+									<tr>
+										<th>인증대상</th>
+										<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>
+											<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>
+											<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>
+											<input type="text" class="w200" id="certNum" name="certNum"  maxlength="20"/>
+											<input type="hidden" id="certNumOrg" name="certNumOrg"/>
+											
+										</td>
+									</tr>
+									<tr>	
+										<th>인증상태</th>
+										<td><span id="certStateTxt"></span></td>
+										<th>인증기관</th>
+										<td><span id="certOrganNameTxt"></span></td>
+										<th>인증일</th>
+										<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>
+						</li>
+						<!-- TAB7 : 이력정보 -->
+						<li class="tab" id="goodstab7">
 							<!-- TAB8 CONTENTS AREA -->
 							<div class="panelStyle">
 								<!-- 내용 삽입 -->
@@ -926,7 +992,8 @@
 			fnGoodsDetailNotiInfoSearch(params);
 			//구매등급
 			fnGoodsDetailOrderGradeSearch(params);
-			
+			//안전인증
+			fnGoodsDetailSafeNoSearch();
 			//구성상품
 			if ("G056_S" == result.goodsType || "G056_D" == result.goodsType){
 				fnGoodsComposeListSearch(params);
@@ -955,6 +1022,12 @@
 	var fnGoodsDetailHstSearch = function() {
 		gagaAgGrid.fetch("/goods/detail/hst/list?goodsCd=" + $('#goodsDetailForm input[name=goodsCd]').val() , gridGoodsHstoryOptions);
 	}
+	//안전인증
+	var fnGoodsDetailSafeNoSearch = function() {
+		var params = new Object();
+		params.goodsCd = $('#goodsDetailForm input[name=goodsCd]').val();
+		cfnAjaxSubmit("/goods/detail/safe", "json", fnGoodsDetailSafeNoSearchCallback, params);
+	}
 	
 	//정보고시 콜백
 	var fnGoodsDetailNotiInfoSearchCallback = function(result) {
@@ -982,6 +1055,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") : '');
+
+	}
+	
 	//구매등급 콜백
 	/* var fnGoodsDetailOrderGradeSearchCallback = function(result) {
 		if (result == null) return;
@@ -1931,28 +2031,75 @@
 		});
 	});
 	
-	
 	// 안전인증
 	$("#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;
+	}
+	
 	//엑셀 상품 조회
 	$('#btnGoodsDealSearchExcel').on('click', function() {
 		cfnExcelUploadPopup('goodsDetailExcelUpload', 'goodsDetailExcelUpload');