Jelajahi Sumber

Merge branch 'develop' into eskim

eskim 4 tahun lalu
induk
melakukan
1bb0b3c302

+ 17 - 11
src/main/java/com/style24/admin/biz/service/TsaShoplinkerService.java

@@ -1,6 +1,5 @@
 package com.style24.admin.biz.service;
 
-import java.io.IOException;
 import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -20,6 +19,7 @@ import com.gagaframework.web.util.GagaFileUtil;
 import com.style24.admin.biz.dao.TsaShoplinkerDao;
 import com.style24.admin.support.env.TsaConstants;
 import com.style24.core.biz.dao.TscShoplinkerDao;
+import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.ExtmallOrder;
 import com.style24.persistence.domain.ShoplinkerGoods;
@@ -147,7 +147,7 @@ public class TsaShoplinkerService {
 			}
 		}catch(Exception e) {
 			log.error("xml 생성오류 ", e);
-			regMap.setApiResult("error");
+			regMap.setApiResult(TscConstants.ShoplinkerApiStat.S_ERROR.value());
 			regMap.setApiMessage("xml 생성오류");
 			tscShoplinkerDao.insertShoplinerApiHst(regMap);
 		}
@@ -220,7 +220,13 @@ public class TsaShoplinkerService {
 				sbRequest.append("			<model>").append(goodsMap.getModel()).append("</model>\n");
 				sbRequest.append("			<model_no>").append(goodsMap.getModelNo()).append("</model_no>\n");
 				sbRequest.append("			<brand>").append(goodsMap.getBrand()).append("</brand>\n");
-				sbRequest.append("			<auth_no>").append(goodsMap.getAuthNo()).append("</auth_no>\n");
+
+				//인증코드 값이 없을 경우 유아동이면 '.' , 아닐경우 ''
+				if( "".equals(goodsMap.getAuthNo()) && "Y".equals(goodsMap.getKidsYn())){
+					sbRequest.append("			<auth_no>").append(".").append("</auth_no>\n");
+				}else {
+					sbRequest.append("			<auth_no>").append(goodsMap.getAuthNo()).append("</auth_no>\n");
+				}
 				sbRequest.append("			<expirydate>20991231</expirydate>\n");
 				sbRequest.append("			<maker>").append(goodsMap.getMaker()).append("</maker>\n");
 				sbRequest.append("			<origin>").append(goodsMap.getOrigin()).append("</origin>\n");
@@ -241,19 +247,19 @@ public class TsaShoplinkerService {
 				}else {
 					// 품목매핑정보 없음. 전송 안함
 					regMap.setXmlTxt(sbRequest.toString());
-					regMap.setApiResult("error");
+					regMap.setApiResult(TscConstants.ShoplinkerApiStat.S_ERROR.value());
 					regMap.setApiMessage("API 전송안함 : 샵링커 품목매핑정보가 없습니다. (자사품목코드: "+goodsMap.getItemkindCd()+")");
 					tscShoplinkerDao.insertShoplinerApiHst(regMap);
 				}
 			}else {
-				regMap.setApiResult("error");
+				regMap.setApiResult(TscConstants.ShoplinkerApiStat.S_ERROR.value());
 				regMap.setApiMessage("상품정보가 없습니다. (자사상품만 등록가능)");
 				tscShoplinkerDao.insertShoplinerApiHst(regMap);
 			}
 
 		}catch(Exception e) {
 			log.error("xml 생성오류 ", e);
-			regMap.setApiResult("error");
+			regMap.setApiResult(TscConstants.ShoplinkerApiStat.S_ERROR.value());
 			regMap.setApiMessage("xml 생성오류");
 			tscShoplinkerDao.insertShoplinerApiHst(regMap);
 		}
@@ -614,7 +620,7 @@ public class TsaShoplinkerService {
 
 		}catch(Exception e) {
 			log.error("xml 생성오류 ", e);
-			regMap.setApiResult("error");
+			regMap.setApiResult(TscConstants.ShoplinkerApiStat.S_ERROR.value());
 			regMap.setApiMessage("xml 생성오류");
 			tscShoplinkerDao.insertShoplinerApiHst(regMap);
 		}
@@ -675,7 +681,7 @@ public class TsaShoplinkerService {
 
 		}catch(Exception e) {
 			log.error("xml 생성오류 ", e);
-			regMap.setApiResult("error");
+			regMap.setApiResult(TscConstants.ShoplinkerApiStat.S_ERROR.value());
 			regMap.setApiMessage("xml 생성오류");
 			tscShoplinkerDao.insertShoplinerApiHst(regMap);
 		}
@@ -746,7 +752,7 @@ public class TsaShoplinkerService {
 
 		}catch(Exception e) {
 			log.error("xml 생성오류 ", e);
-			regMap.setApiResult("error");
+			regMap.setApiResult(TscConstants.ShoplinkerApiStat.S_ERROR.value());
 			regMap.setApiMessage("xml 생성오류");
 			tscShoplinkerDao.insertShoplinerApiHst(regMap);
 		}
@@ -804,7 +810,7 @@ public class TsaShoplinkerService {
 		} catch (Exception e) {
 			log.error(" callGoodsRegApi error", e);
 			map.setXmlTxt(sbRequest.toString());
-			map.setApiResult("error");
+			map.setApiResult(TscConstants.ShoplinkerApiStat.S_ERROR.value());
 			map.setApiMessage("API 오류 "+StringUtils.abbreviate(responseXmlData, 0 , 120));
 		}
 
@@ -1116,7 +1122,7 @@ public class TsaShoplinkerService {
 						apiHstMap.setApiType("INVOICE");
 						apiHstMap.setXmlTxt(sbRequest.toString());
 						apiHstMap.setOrdDtlNo(info.getOrdDtlNo());
-						apiHstMap.setApiResult("error");
+						apiHstMap.setApiResult(TscConstants.ShoplinkerApiStat.S_ERROR.value());
 						apiHstMap.setApiMessage("API 오류");
 					}
 

+ 31 - 17
src/main/java/com/style24/admin/biz/service/TsaWithdrawService.java

@@ -491,24 +491,38 @@ public class TsaWithdrawService {
 				// PG 미전송이 아닐 경우 (Y면 미전송, N이면 전송)
 				if("N".equals(change.getPgStat())) {
 					// WMS 예외로 넘어온 데이터인지 확인 후 네이버페이 진행
-					OrderChange exception = orderChangeDao.getOrderRecallExceptionInfo(change);		// 예외 품절 및 불량 정보 조회
-
-					if(exception.getOrderDtlNo() > 0) {		// 확정 후 품절 및 불량이 있을경우
-						if("O".equals(exception.getOrdExchGb())) {				// 원배송 확정 후 품절 및 불량
-							// 품절 취소 송부
-							Order param = new Order();
-							param.setOrdDtlNo(exception.getOrdDtlNo());
-							coreNaverPayService.sendNaverPaySoldoutCancel(param, userNo);			// 품절취소
-						} else if ("E".equals(exception.getOrdExchGb())){		// 교환 후 확정 후 품절 및 불량
-							// 교환 반려 > 반품 접수 > 반품 완료
-							Order param = new Order();
-							param.setOrdDtlNo(exception.getOrdDtlNo());
-							coreNaverPayService.sendNaverPayRejectExchange(exception, userNo);		// 교환반려
-							coreNaverPayService.sendNaverPaySoldoutReturnReq(param, userNo);		// 품절반품접수
-							coreNaverPayService.sendNaverPayReturnComplete(exception, userNo);		// 반품완료
+					Collection<OrderChange> exceptions = orderChangeDao.getOrderRecallExceptionInfo(change);		// 예외 품절 및 불량 정보 조회
+					int i = 0;
+
+					for(OrderChange exception : exceptions) {
+						if(exception.getOrderDtlNo() > 0) {		// 확정 후 품절 및 불량이 있을경우
+							if("O".equals(exception.getOrdExchGb())) {				// 원배송 확정 후 품절 및 불량
+								// 품절 취소 송부
+								Order param = new Order();
+								param.setOrdDtlNo(exception.getOrdDtlNo());
+								coreNaverPayService.sendNaverPaySoldoutCancel(param, userNo);			// 품절취소
+							} else if ("E".equals(exception.getOrdExchGb())){		// 교환 후 확정 후 품절 및 불량
+								// 교환 반려 > 반품 접수 > 반품 완료
+								Order param = new Order();
+								param.setOrdDtlNo(exception.getOrdDtlNo());
+
+								if(i < 1) {
+									coreNaverPayService.sendNaverPayRejectExchange(exception, userNo);        // 교환반려
+								}
+
+								coreNaverPayService.sendNaverPaySoldoutReturnReq(param, userNo);		// 품절반품접수
+
+								if(i < 1) {
+									coreNaverPayService.sendNaverPayReturnComplete(exception, userNo);        // 반품완료
+								}
+							}
+						} else {								// 정상 반품 완료
+							if(i < 1) {
+								coreNaverPayService.sendNaverPayReturnComplete(exception, userNo);            // 반품완료
+							}
 						}
-					} else {								// 정상 반품 완료
-						coreNaverPayService.sendNaverPayReturnComplete(exception, userNo);			// 반품완료
+
+						i++;
 					}
 				}
 			}

+ 3 - 6
src/main/java/com/style24/admin/biz/web/TsaOrderChangeController.java

@@ -364,7 +364,8 @@ public class TsaOrderChangeController extends TsaBaseController {
 		ordDtlStatArr[3] = TscConstants.OrderDetailStat.DELIVERY_PREPARE.value();
 		order.setOrdDtlStatArr(ordDtlStatArr);
 
-		// 2. 변경신청된 주문상세번호를 체크 후 있으면 해당 취소가능수량값 업데이트 
+		// 2. 변경신청된 주문상세번호를 체크 후 있으면 해당 취소가능수량값 업데이트
+		order.setChgGb(TscConstants.OrderChangeGb.RETURN.value());
 		List<Order> cancelRequestTargetList 		= coreOrderChangeService.getCancelRequestTargetList2(order);
 		List<Order> orderChangeDetailList 			= coreOrderChangeService.getOrderChangeDetailList(order);
 		Collection<Order> orderInfoList 			= coreOrderService.getOrderInfoList(order);
@@ -694,13 +695,8 @@ public class TsaOrderChangeController extends TsaBaseController {
 	 */
 	@GetMapping("/exchange/request/form")
 	public ModelAndView exchangeRequestFrom(Order order) {
-
-		// Order order = new Order();
 		ModelAndView mav = new ModelAndView();
 
-		// order.setOrdNo(ordNo);
-		// order.setOrdChgSq(ordChgSq);
-
 		// 교환가능 주문상세상탭값 설정
 		String[] ordDtlStatArr = new String[3];
 		ordDtlStatArr[0] = TscConstants.OrderDetailStat.SHIPPING.value();
@@ -708,6 +704,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 		ordDtlStatArr[2] = TscConstants.OrderDetailStat.DELIVERY_COMPLETE.value();
 		order.setOrdDtlStatArr(ordDtlStatArr);
 
+		order.setChgGb(TscConstants.OrderChangeGb.EXCHANGE.value());
 		Collection<Order> cancelRequestTargetList = coreOrderChangeService.getCancelRequestTargetList(order);
 		Collection<Order> orderChangeDetailList = coreOrderChangeService.getOrderChangeDetailList(order);
 		Collection<Order> orderInfoList = coreOrderService.getOrderInfoList(order);

+ 24 - 46
src/main/java/com/style24/admin/biz/web/TsaShoplinkerController.java

@@ -185,7 +185,6 @@ public class TsaShoplinkerController extends TsaBaseController {
 		ShoplinkerGoods shoplinkerGoods = new ShoplinkerGoods();
 		shoplinkerGoods.setExcelFileNm(paramMap.get("excelFileNm"));
 
-		GagaMap rtnMap = new GagaMap();
 		String profiles = env.getProperty("spring.profiles.active").toLowerCase();
 		String targetPath = GagaFileUtil.getConcatenationPath(env.getProperty("upload.excel.target.path"), "excel");
 		Collection<GagaMap> ecxelGoodsList = new ArrayList<>();
@@ -237,18 +236,15 @@ log.info(" #### SHOPLINKER CHKE 1 - "+runMap.getRunCnt()+" | "+runMap.getSidOver
 				// 4. 파일 삭제
 				GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(targetPath, shoplinkerGoods.getExcelFileNm()));
 
-				rtnMap.setString("RESULT_TYPE", "TRUE");
+				slkSearch.setRunStat(TscConstants.ShoplinkerApiStat.END.value());	// 상태값지정
 
 			}catch (Exception e) {
 
 				log.error("TsaShoplinkerController.orderReceiveList => error \n"+e);
-				rtnMap.setString("RESULT_TYPE", "ERROR");
-				rtnMap.setString("RUN_STAT", "ERROR");
-				rtnMap.setString("TXT", e.getMessage());
+				slkSearch.setRunStat(TscConstants.ShoplinkerApiStat.ERROR.value());	// 상태값지정
 
 			}finally {
-				// 4. API 호출 이력 저장 종료
-				slkSearch.setRunStat("END");
+				// 5. API 호출 이력 저장 종료
 				tscShoplinkerService.saveCallApiRunable(slkSearch);
 			}
 		}
@@ -522,32 +518,29 @@ log.info(" #### SHOPLINKER CHKE 1 - "+runMap.getRunCnt()+" | "+runMap.getSidOver
 				shoplinkerOrder.setAcType("ADMMIN");
 				rtnMap = tscShoplinkerService.insertShoplinkerOrderStep1(shoplinkerOrder);
 
-				// 3. 제휴몰 주문등록
-				slkSearch.setTxt("=>제휴몰");
-				tscShoplinkerService.updateCallApiRunable(slkSearch);
-				tscShoplinkerService.insertShoplinkerOrderStep2(shoplinkerOrder);
+				if(TscConstants.ShoplinkerApiStat.TRUE.value().equals(rtnMap.getString("RESULT_TYPE"))) {
+					// 3. 제휴몰 주문등록
+					slkSearch.setTxt("=>제휴몰");
+					tscShoplinkerService.updateCallApiRunable(slkSearch);
+					tscShoplinkerService.insertShoplinkerOrderStep2(shoplinkerOrder);
+
+					// 4. 스타일24 주문등록 (제휴몰 - 대기상태인 것들)
+					slkSearch.setTxt("=>스타일24");
+					tscShoplinkerService.updateCallApiRunable(slkSearch);
+					orderOcmService.createShoplinkerOrder("S", TsaSession.getInfo().getUserNo());
+				}
 
-				// 4. 스타일24 주문등록 (제휴몰 - 대기상태인 것들)
-				slkSearch.setTxt("=>스타일24");
-				tscShoplinkerService.updateCallApiRunable(slkSearch);
-				orderOcmService.createShoplinkerOrder("S", TsaSession.getInfo().getUserNo());
+				slkSearch.setRunStat(TscConstants.ShoplinkerApiStat.END.value());	// 상태값지정
+				slkSearch.setTxt("=>FINISH");
 
 			}catch (Exception e) {
 
 				log.error("TsaShoplinkerController.orderReceiveList => error \n"+e);
-				rtnMap.setString("RESULT_TYPE", "ERROR");
-				rtnMap.setString("RUN_STAT", "ERROR");
-				rtnMap.setString("TXT", e.getMessage());
-				rtnMap.setString("RESULT_MSG", "오류입니다. 관리자에게 문의하세요. \n"+StringUtils.abbreviate(e.getMessage(), 0 , 120));
-				slkSearch.setRunStat("ERROR");
+				slkSearch.setRunStat(TscConstants.ShoplinkerApiStat.ERROR.value());	// 상태값지정
 				slkSearch.setTxt("=>ERROR : "+StringUtils.abbreviate(e.getMessage(), 0 , 120));
 
 			}finally {
 				// 4. API 호출 이력 저장 종료
-				if(!"ERROR".equals(slkSearch.getRunStat())){
-					slkSearch.setRunStat("END");
-					slkSearch.setTxt("=>FINISH");
-				}
 				tscShoplinkerService.saveCallApiRunable(slkSearch);
 			}
 		}
@@ -639,7 +632,6 @@ log.info(" #### SHOPLINKER CHKE 1 - "+runMap.getRunCnt()+" | "+runMap.getSidOver
 	@PostMapping("/invoice/send/register")
 	@ResponseBody
 	public void shoplinkerSendInvoice(@RequestParam(value = "stDate") String stDate, @RequestParam(value = "edDate") String edDate) throws Exception {
-		GagaMap rtnMap = new GagaMap();
 
 		// API 호출 중인건수 있는지 확인
 		ShoplinkerSearch slkSearch = new ShoplinkerSearch();
@@ -680,24 +672,17 @@ log.info(" #### SHOPLINKER CHKE 1 - "+runMap.getRunCnt()+" | "+runMap.getSidOver
 				Collection<ShoplinkerInvoice> sendList = tscShoplinkerService.getShoplinkerInvoiceOrdDtlSendList();
 				tscShoplinkerService.createShoplinkerInvoiceXml(shoplinkerInvoice, sendList);
 
-				rtnMap.setString("RESULT_TYPE", "TRUE");
+				slkSearch.setRunStat(TscConstants.ShoplinkerApiStat.END.value());	// 상태값지정
+				slkSearch.setTxt("=>FINISH");
 
 			}catch (Exception e) {
 
 				log.error("TsaShoplinkerController.shoplinkerInvoiceRegister => error \n"+e);
-				rtnMap.setString("RESULT_TYPE", "ERROR");
-				rtnMap.setString("RUN_STAT", "ERROR");
-				rtnMap.setString("TXT", e.getMessage());
-				rtnMap.setString("RESULT_MSG", "오류입니다. 관리자에게 문의해주세요.");
-				slkSearch.setRunStat("ERROR");
+				slkSearch.setRunStat(TscConstants.ShoplinkerApiStat.ERROR.value());	// 상태값지정
 				slkSearch.setTxt("=>ERROR : "+StringUtils.abbreviate(e.getMessage(), 0 , 120));
 
 			}finally {
 				// 3. API 호출 이력 저장 종료
-				if(!"ERROR".equals(slkSearch.getRunStat())){
-					slkSearch.setRunStat("END");
-					slkSearch.setTxt("=>FINISH");
-				}
 				tscShoplinkerService.saveCallApiRunable(slkSearch);
 			}
 		}
@@ -758,7 +743,7 @@ log.info(" #### SHOPLINKER CHKE 1 - "+runMap.getRunCnt()+" | "+runMap.getSidOver
 		if( null != runMap ) {
 			a_bool = false;
 			// 현재 실행중인값 존재
-			rtnMap.setString("RESULT_TYPE", "RUN");
+			rtnMap.setString("RESULT_TYPE", TscConstants.ShoplinkerApiStat.RUN.value());
 			rtnMap.setString("RESULT_MSG", runMap.getRunStdt()+"에 호출한 건이 현재 실행중입니다.");
 		}
 
@@ -802,24 +787,17 @@ log.info(" #### SHOPLINKER CHKE 1 - "+runMap.getRunCnt()+" | "+runMap.getSidOver
 				// 3. 파일 삭제
 				GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(targetPath, shoplinkerInvoice.getExcelFileNm()));
 
-				rtnMap.setString("RESULT_TYPE", "TRUE");
+				slkSearch.setRunStat(TscConstants.ShoplinkerApiStat.END.value());	// 상태값지정
+				slkSearch.setTxt("=>FINISH");
 
 			}catch (Exception e) {
 
 				log.error("TsaShoplinkerController.shoplinkerInvoiceRegister => error \n"+e);
-				rtnMap.setString("RESULT_TYPE", "ERROR");
-				rtnMap.setString("RUN_STAT", "ERROR");
-				rtnMap.setString("TXT", e.getMessage());
-				rtnMap.setString("RESULT_MSG", "오류입니다. 관리자에게 문의해주세요.");
-				slkSearch.setRunStat("ERROR");
+				slkSearch.setRunStat(TscConstants.ShoplinkerApiStat.ERROR.value());	// 상태값지정
 				slkSearch.setTxt("=>ERROR : "+StringUtils.abbreviate(e.getMessage(), 0 , 120));
 
 			}finally {
 				// 4. API 호출 이력 저장 종료
-				if(!"ERROR".equals(slkSearch.getRunStat())){
-					slkSearch.setRunStat("END");
-					slkSearch.setTxt("=>FINISH");
-				}
 				tscShoplinkerService.saveCallApiRunable(slkSearch);
 			}
 		}

+ 1 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsaClause.xml

@@ -32,7 +32,7 @@
 		     , CLAUSE_TYPE
 		     , CLAUSE_TITLE
 		     , CLAUSE_CONTENT
-		     , DATE_FORMAT(EFFECT_DT,'%Y%m%d')    AS EFFECT_DT
+		     , DATE_FORMAT(EFFECT_DT,'%Y-%m-%d')  AS EFFECT_DT
 		     , DISP_YN
 		     , FN_GET_USER_NM(REG_NO)             AS REG_NM
 		     , DATE_FORMAT(REG_DT,'%Y%m%d%H%i%S') AS REG_DT

+ 39 - 67
src/main/java/com/style24/persistence/mybatis/shop/TsaShoplinker.xml

@@ -54,14 +54,11 @@
 			, MAKE_YMD AS MAKER_DT -- 발행일(제조일)
 			, '001' AS TAX_YN -- 과세
 			, '' AS NEW_DESC_TOP -- 신상세설명
-			, '전국' AS SALEAREA
-			-- , SEX_GB
-			-- , FN_GET_CODE_NM('G007', SEX_GB) AS SEX_NM
 			, (CASE SEX_GB WHEN 'G007_M' THEN '002' WHEN 'G007_F' THEN '003' ELSE '001' END) AS SEX -- 샵링커 성별
 			, GOODS_CD AS MODEL -- 모델명
 			, GOODS_CD AS MODEL_NO -- 모델NO
 			, (SELECT BRAND_ENM FROM TB_BRAND S WHERE A.BRAND_CD = S.BRAND_CD AND USE_YN = 'Y') AS BRAND -- 브랜드명
-			, ( SELECT CERT_NUM FROM TB_GOODS_SAFE_NO S WHERE A.GOODS_CD = S.GOODS_CD ) AS AUTH_NO -- 인증번호
+			, IFNULL(( SELECT CERT_NUM FROM TB_GOODS_SAFE_NO S WHERE A.GOODS_CD = S.GOODS_CD ), '') AS AUTH_NO -- 인증번호
 			, '20991231' AS EXPIRYDATE -- 유효일
 			, (SELECT NI_CONTENT FROM TB_GOODS_NOTI_INFO S WHERE A.GOODS_CD = S.GOODS_CD AND NI_ITEM_CD = 'G005_005') AS MAKER -- 제조업체
 			, IFNULL((select S.EXTMALL_ORIGIN_NM from TB_EXTMALL_ORIGIN S where S.ORIGIN_CD = A.ORIGIN_CD), '') AS ORIGIN -- 원산지명 OR 코드
@@ -639,78 +636,53 @@
 	<!-- 송장전송-전송 목록 건수 cnt -->
 	<select id="getSendInvoiceListCount" parameterType="ShoplinkerInvoice" resultType="int">
 		/* TsaShoplinker.getSendInvoiceListCount */
-		select count(1) from (
-			SELECT
-				OD.ORD_NO
-				, OD.ORD_DTL_NO
-				, (SELECT SHIP_COMP_NM FROM TB_SHIP_COMPANY S WHERE S.SHIP_COMP_CD = OD.SHIP_COMP_CD ) AS SHIP_COMP_NM
-				, OD.SHIP_COMP_CD AS DELIVERY_CODE-- 배송업체(택배사코드)
-				, OD.INVOICE_NO AS DELIVERY_INVOICE-- 송장번호
-
-				, OD.VENDOR_ID -- 외부몰벤더ID
-				, OD.EXTMALL_ID -- 외부몰ID(외부몰)
-				, OD.AGENT_ORDER_ID -- 에이전트주문번호
-				, OD.EXTMALL_ORDER_ID -- 외부몰주문번호
-				, OD.DELV_ASSIGN_STAT -- 출고지정상태(P:대기,Y:수락,N:거부)
-				, OD.ORD_EXCH_GB -- 주문교환구분(O:주문,E:교환)
-				, OD.ORD_DTL_STAT -- 주문상세상태(공통코드G013)
-				, FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT) AS ORD_DTL_STAT_NM
-				, OD.DELV_STDT
-
-				, SL.API_RESULT
-				, SL.API_MESSAGE
-				, SL.XML_TXT
-				, FN_GET_USER_NM(SL.REG_NO) AS REG_NM
-			FROM
-				TB_ORDER_DETAIL OD
-				LEFT OUTER JOIN SHOPLINKER_SYNC_HST SL ON OD.ORD_DTL_NO = SL.ORD_DTL_NO AND SL.API_TYPE = 'INVOICE'
-			WHERE OD.VENDOR_ID = 'G003_V001'
-			AND OD.INVOICE_NO IS NOT NULL
-			AND OD.DELV_STDT IS NOT NULL
-
-			<include refid="getSlkInvoiceCondition_sql"/>
-		) A
+		SELECT
+			count(OD.ORD_DTL_NO)
+		FROM
+			TB_ORDER_DETAIL OD
+			LEFT OUTER JOIN SHOPLINKER_SYNC_HST SL ON OD.ORD_DTL_NO = SL.ORD_DTL_NO AND SL.API_TYPE = 'INVOICE'
+		WHERE OD.VENDOR_ID = 'G003_V001'
+		AND OD.INVOICE_NO IS NOT NULL
+		AND OD.DELV_STDT IS NOT NULL
+		<include refid="getSlkInvoiceCondition_sql"/>
 
 	</select>
 
 	<!-- 송장전송-전송 목록 -->
 	<select id="getSendInvoiceList" parameterType="ShoplinkerInvoice" resultType="ShoplinkerInvoice">
 		/* TsaShoplinker.getSendInvoiceList */
-		SELECT * FROM
-		(
-			SELECT
-				OD.ORD_NO
-				, OD.ORD_DTL_NO
-				, (SELECT SHIP_COMP_NM FROM TB_SHIP_COMPANY S WHERE S.SHIP_COMP_CD = OD.SHIP_COMP_CD ) AS SHIP_COMP_NM
-				, OD.SHIP_COMP_CD AS DELIVERY_CODE-- 배송업체(택배사코드)
-				, OD.INVOICE_NO AS DELIVERY_INVOICE-- 송장번호
-
-				, OD.VENDOR_ID -- 외부몰벤더ID
-				, OD.EXTMALL_ID -- 외부몰ID(외부몰)
-				, OD.AGENT_ORDER_ID -- 에이전트주문번호
-				, OD.EXTMALL_ORDER_ID -- 외부몰주문번호
-				, OD.DELV_ASSIGN_STAT -- 출고지정상태(P:대기,Y:수락,N:거부)
-				, OD.ORD_EXCH_GB -- 주문교환구분(O:주문,E:교환)
-				, OD.ORD_DTL_STAT -- 주문상세상태(공통코드G013)
-				, FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT) AS ORD_DTL_STAT_NM
-				, OD.DELV_STDT
-
-				, SL.API_RESULT
-				, SL.API_MESSAGE
-				, SL.XML_TXT
-				, SL.REG_DT
-			FROM
-				TB_ORDER_DETAIL OD
-				LEFT OUTER JOIN SHOPLINKER_SYNC_HST SL ON OD.ORD_DTL_NO = SL.ORD_DTL_NO AND SL.API_TYPE = 'INVOICE'
-			WHERE OD.VENDOR_ID = 'G003_V001'
-			AND OD.INVOICE_NO IS NOT NULL
-			AND OD.DELV_STDT IS NOT NULL
+		SELECT
+			OD.ORD_NO
+			, OD.ORD_DTL_NO
+			, (SELECT SHIP_COMP_NM FROM TB_SHIP_COMPANY S WHERE S.SHIP_COMP_CD = OD.SHIP_COMP_CD ) AS SHIP_COMP_NM
+			, OD.SHIP_COMP_CD AS DELIVERY_CODE-- 배송업체(택배사코드)
+			, OD.INVOICE_NO AS DELIVERY_INVOICE-- 송장번호
 
-			<include refid="getSlkInvoiceCondition_sql"/>
+			, OD.VENDOR_ID -- 외부몰벤더ID
+			, OD.EXTMALL_ID -- 외부몰ID(외부몰)
+			, OD.AGENT_ORDER_ID -- 에이전트주문번호
+			, OD.EXTMALL_ORDER_ID -- 외부몰주문번호
+			, OD.DELV_ASSIGN_STAT -- 출고지정상태(P:대기,Y:수락,N:거부)
+			, OD.ORD_EXCH_GB -- 주문교환구분(O:주문,E:교환)
+			, OD.ORD_DTL_STAT -- 주문상세상태(공통코드G013)
+			, FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT) AS ORD_DTL_STAT_NM
+			, OD.DELV_STDT
 
-		) A
+			, SL.API_RESULT
+			, SL.API_MESSAGE
+			, SL.XML_TXT
+			, SL.REG_DT
+			, FN_GET_USER_NM(SL.REG_NO) AS REG_NM
+		FROM
+			TB_ORDER_DETAIL OD
+			LEFT OUTER JOIN SHOPLINKER_SYNC_HST SL ON OD.ORD_DTL_NO = SL.ORD_DTL_NO AND SL.API_TYPE = 'INVOICE'
+		WHERE OD.VENDOR_ID = 'G003_V001'
+		AND OD.INVOICE_NO IS NOT NULL
+		AND OD.DELV_STDT IS NOT NULL
+
+		<include refid="getSlkInvoiceCondition_sql"/>
 
-		ORDER BY DELV_STDT DESC, REG_DT DESC, ORD_NO, ORD_DTL_NO
+		ORDER BY OD.DELV_STDT DESC, SL.REG_DT DESC, OD.ORD_NO, OD.ORD_DTL_NO
 		LIMIT #{pageable.limitStartRow} ,  #{pageable.pageSize}
 	</select>
 

+ 4 - 4
src/main/webapp/WEB-INF/views/display/MainMultiContentsPopupForm.html

@@ -107,7 +107,7 @@ console.log('brandGroupNo:'+brandGroupNo);
 				// html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddTitlePopRow(this);">타이틀추가</button>';
 				// html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddSubTextPopRow(this);">서브텍스트추가</button>';
 			}
-			html += '<button type="button" class="btn btn-base btn-lg" id="addGoodsBtn'+i+'" onclick="fnAddGoodsRow(this);">상품추가</button>';
+			html += '<button type="button" class="btn btn-base btn-lg" id="addGoodsBtn'+i+'" onclick="fnAddGoodsRow(this, '+i+');">상품추가</button>';
 			html += '<button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteBrandRow(this);">삭제</button></td>';
 			html += '</tr>';
 			if(contentsLoc=='SMM009' || contentsLoc=='SMM012'){
@@ -119,7 +119,7 @@ console.log('brandGroupNo:'+brandGroupNo);
 			if(contentsLoc=='SMM007') {
 				html += '<tr>';
 				html += '<th>브랜드코드</th>';
-				html += '<td colspan="3"><input type="text" name="brandGroupNo" style="width:30%;" value="' + result[i].brandGroupNo + '">';
+				html += '<td colspan="3"><input type="text" name="brandGroupNo" required="required" data-valid-name="브랜드코드" style="width:30%;" value="' + result[i].brandGroupNo + '">';
 				html += '<button type="button" class="btn btnRight btn-success btn-lg" onclick="fnGetBrandGroup(this);">브랜드조회</button>';
 				html += '</td>';
 				html += '</tr>';
@@ -349,7 +349,7 @@ console.log('brandGroupNo:'+brandGroupNo);
 			// html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddTitlePopRow(this);">타이틀추가</button>';
 			// html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddSubTextPopRow(this);">서브텍스트추가</button>';
 		}
-		html += '<button type="button" class="btn btn-base btn-lg" id="addGoodsBtn'+brandIdx+'" onclick="fnAddGoodsRow(this);">상품추가</button>';
+		html += '<button type="button" class="btn btn-base btn-lg" id="addGoodsBtn'+brandIdx+'" onclick="fnAddGoodsRow(this, '+brandIdx+');">상품추가</button>';
 		html += '<button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteBrandRow(this);">삭제</button></td>';
 		html += '</tr>';
 		if(contentsLoc=='SMM009' || contentsLoc=='SMM012'){
@@ -361,7 +361,7 @@ console.log('brandGroupNo:'+brandGroupNo);
 		if(contentsLoc=='SMM007'){
 			html += '<tr>';
 			html += '<th>브랜드코드</th>';
-			html += '<td colspan="3"><input type="text" name="brandGroupNo" style="width:30%;">';
+			html += '<td colspan="3"><input type="text" name="brandGroupNo" style="width:30%;" required="required" data-valid-name="브랜드코드">';
 			html += '<button type="button" class="btn btnRight btn-success btn-lg" onclick="fnGetBrandGroup(this);">브랜드조회</button>';
 			html += '</td>';
 			html += '</tr>';

+ 1 - 1
src/main/webapp/WEB-INF/views/envset/ClauseDetailForm.html

@@ -57,7 +57,7 @@
 							</td>
 							<th>시행일자<em class="required" title="필수"></em></th>
 							<td>
-								<input type="text" class="schDate w80" name="effectDt" maxlength="10" required="required" data-valid-type="calendar" data-valid-name="시행일자"/>
+								<input type="text" class="schDate w80" name="effectDt" maxlength="10" th:value="${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}" required="required" data-valid-type="calendar" data-valid-name="시행일자"/>
 							</td>
 						</tr>
 						<tr>

+ 1 - 1
src/main/webapp/WEB-INF/views/shoplinker/ShoplinkerGoodsSendForm.html

@@ -29,7 +29,7 @@
 			<!-- 검색조건 영역 -->
 			<div class="panelStyle">
 				<div class="panelTitle">
-					<h3><i class="fa fa-info-circle"></i>아래 검색조건 중 상품코드나 등록일을 꼭 입력해 주세요.</h3>
+					<h3><i class="fa fa-info-circle"></i>아래 검색조건 중 상품코드나 등록일을 꼭 입력해 주세요. -v0</h3>
 					<span class="panelControl">
 						<i class="fa fa-chevron-up"></i>
 					</span>

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

@@ -29,7 +29,7 @@
 
 			<div class="panelStyle">
 				<div class="panelTitle">
-					<h3><i class="fa fa-info-circle"></i>[배치주기] 평일: 5시~15시 한시간 단위 | (월) 5시: 전주 금요일 15 ~ 금일 5시 / (화~금) 5시: 전날 15 ~ 금일 5시 -v3</h3>
+					<h3><i class="fa fa-info-circle"></i>[배치주기] 평일: 5시~15시 한시간 단위 | (월) 5시: 전주 금요일 15 ~ 금일 5시 / (화~금) 5시: 전날 15 ~ 금일 5시</h3>
 					<span class="panelControl">
 						<i class="fa fa-chevron-up"></i>
 					</span>
@@ -46,7 +46,7 @@
 							<td colspan="7">
 								<input name="apiStDate" id="apiStDate" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="주문수집일" />
 								&nbsp;&nbsp;&nbsp;&nbsp;
-								<button th:if="${sessionInfo.userId == 'jmh'}" type="button" class="btn btn-primary btn-lg" id="btnCollection">주문수집</button>
+								<button type="button" class="btn btn-primary btn-lg" id="btnCollection">주문수집</button>
 								&nbsp;<span class="runable_info"></span>
 							</td>
 						</tr>
@@ -409,7 +409,7 @@
 		// Create a agGrid
 		gagaAgGrid.createGrid('gridList', gridOptions);
 
-		fnGetCallRunableInfo();
+		fnGetCallRunableInfo(0);
 
 	});
 
@@ -422,8 +422,8 @@
 		}
 
 		var testDate = Number($("#orderCollectionForm input[name=apiStDate]").val().replaceAll("-", ""));
-		if( testDate < 20210401 || 20210601 < testDate){
-			mcxDialog.alert("※ 테스트 주문수집시 ※<br>실제운영 주문건을 가져오므로 4월부터 ~ 6월이전 사이 날짜로 조회해주세요.");
+		if( testDate < 20210501 || 20210701 < testDate){
+			mcxDialog.alert("※ 테스트 주문수집시 ※<br>실제운영 주문건을 가져오므로 5월부터 ~ 7월이전 사이 날짜로 조회해주세요.");
 			return;
 		}
 
@@ -444,7 +444,7 @@
 						$("#btnCollection").removeClass("btn-primary");
 						$("#btnCollection").addClass("btn-dark");
 						setTimeout(function(){
-							fnGetCallRunableInfo();
+							fnGetCallRunableInfo(1);
 						}, 20000 );
 					}else{
 						mcxDialog.alert(result.runStdt+"에 호출한 건이 현재 실행중입니다.<br>"+result.txt);
@@ -455,7 +455,7 @@
 	});
 
 	// 진행상태 확인
-	function fnGetCallRunableInfo(){
+	function fnGetCallRunableInfo(num){
 
 		var jsonData = JSON.stringify({apiType : "ORDER"});
 		gagajf.ajaxJsonSubmit('/shoplinker/check/api_runable', jsonData, function(result) {
@@ -467,7 +467,7 @@
 					$("#btnCollection").addClass("btn-primary");
 					$("#btnCollection").removeClass("btn-dark");
 
-					if( 5 < $(".runable_info").html().length){
+					if( (5 < $(".runable_info").html().length) || (num == 1)){
 						var resultTxt = result.txt;
 						if( null != resultTxt ){
 							resultTxt = resultTxt.replace("제휴몰", "제휴몰남은수 "+result.remainExtCnt.addComma());
@@ -490,7 +490,7 @@
 					}
 
 					setTimeout(function(){
-						fnGetCallRunableInfo();
+						fnGetCallRunableInfo(0);
 					}, 20000 );
 				}
 			}