Compare commits
56 Commits
be349e305b
...
master_ord
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
305d5d226c | ||
|
|
8a5583b600 | ||
|
|
5db37dfafb | ||
|
|
bcf64f0f92 | ||
|
|
2763d956a8 | ||
|
|
96670ab6a5 | ||
|
|
1097660b22 | ||
|
|
12ae420a48 | ||
|
|
1a7cab2c9c | ||
|
|
072704c995 | ||
|
|
cb022e9841 | ||
|
|
4939bf7954 | ||
|
|
55192f8ccc | ||
|
|
780f061592 | ||
|
|
daf9770fbe | ||
|
|
86c7b59070 | ||
|
|
190f81d5c6 | ||
|
|
e6bf779b11 | ||
|
|
e9b53f049e | ||
|
|
a1c1b77c86 | ||
|
|
f82df1e5cf | ||
|
|
006d3f5a09 | ||
|
|
844d539166 | ||
|
|
543a05b5f5 | ||
|
|
f5dfdb2f78 | ||
|
|
3b8eba8e0b | ||
|
|
df6340658e | ||
|
|
f8282b55e0 | ||
|
|
c567cf4d4c | ||
|
|
acf929e0eb | ||
|
|
8f131dcec4 | ||
|
|
cbc4c6bee5 | ||
|
|
a7dd13fc65 | ||
|
|
252a27601e | ||
|
|
b654dcb447 | ||
|
|
22d45afeb5 | ||
|
|
36b0f963c2 | ||
|
|
77060045ca | ||
|
|
c0d7079e37 | ||
|
|
bda09e6e4f | ||
|
|
4f920c0919 | ||
|
|
d41b6a45f6 | ||
|
|
a1a107cfe1 | ||
|
|
542ec44a3c | ||
|
|
3346af5d1f | ||
|
|
df0cba8888 | ||
|
|
5cc24e3fc9 | ||
|
|
60f083a22f | ||
|
|
72328ab9f8 | ||
|
|
eee0e423f8 | ||
|
|
73690055e2 | ||
|
|
a43c0b5ae3 | ||
|
|
46b465c74b | ||
|
|
8797be6b74 | ||
|
|
3e409a3408 | ||
|
|
27b816b332 |
@@ -34,7 +34,7 @@ public class ImagePaginationRenderer extends AbstractPaginationRenderer implemen
|
||||
//previousPageLabel = "<li><a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \"><img src=\"" + servletContext.getContextPath() + "/images/egovframework/com/cmm/mod/icon/icon_prev.gif\" alt=\"이전\" border=\"0\"/></a></li>";
|
||||
previousPageLabel = "<button class=\"pagination__item prev\" onclick=\"{0}({1});return false; \"><span class=\"visually-hidden\">이전 페이지로</span></button>";
|
||||
//currentPageLabel = "<li><strong>{0}</strong></li>";
|
||||
currentPageLabel = "<li><button class=\"pagination__item active\"><span>{0}</span></button></li>";
|
||||
currentPageLabel = "<li><button class=\"pagination__item active\" onclick=\"return false; \"><span>{0}</span></button></li>";
|
||||
//otherPageLabel = "<li><a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \">{2}</a></li>";
|
||||
otherPageLabel = "<li><button class=\"pagination__item\" onclick=\"{0}({1});return false; \"><span>{2}</span></button></li>";
|
||||
//nextPageLabel = "<li> <a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \"><img src=\"" + servletContext.getContextPath() + "/images/egovframework/com/cmm/mod/icon/icon_next.gif\" alt=\"다음\" border=\"0\"/></a></li>";
|
||||
|
||||
@@ -286,6 +286,13 @@ public class BOMaMtngController {
|
||||
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
|
||||
}
|
||||
} else {
|
||||
// if (CollectionUtils.isEmpty(multiOrdrDlvylc)) {
|
||||
// log.info("배송지 정보를 찾을 수 없습니다.");
|
||||
// content.put("result","Y");
|
||||
// content.put("message", "배송지 정보를 찾을 수 없습니다.");
|
||||
// // throw new WnbtRestException("주문유형 정보를 찾을 수 없습니다.");
|
||||
// return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
|
||||
// }
|
||||
if (CollectionUtils.isEmpty(shipping)) {
|
||||
log.info("배송지 정보를 찾을 수 없습니다.");
|
||||
content.put("result","Y");
|
||||
@@ -322,27 +329,91 @@ public class BOMaMtngController {
|
||||
String[] receptMbtlnbArray = null; // 배송지 받는이 휴대폰번호
|
||||
|
||||
if ("01".equals(ordrTyCd) || "03".equals(ordrTyCd) || "06".equals(ordrTyCd)) { // 일반주문, 회원개인결제, 정기배송
|
||||
if (
|
||||
StringUtil.isEmpty((String) shipping.get("dlvylcZip")) ||
|
||||
StringUtil.isEmpty((String) shipping.get("dlvylcAdresDvCd")) ||
|
||||
( "01".equals(shipping.get("dlvylcAdresDvCd")) && StringUtil.isEmpty((String) shipping.get("dlvylcRnmAdres")) ) ||
|
||||
( "02".equals(shipping.get("dlvylcAdresDvCd")) && StringUtil.isEmpty((String) shipping.get("dlvylcLnbAdres")) ) ||
|
||||
StringUtil.isEmpty((String) shipping.get("dlvylcAdresDtl"))
|
||||
) {
|
||||
content.put("result","Y");
|
||||
content.put("message", "배송지 정보를 찾을 수 없습니다. 다시 시도해 주세요.");
|
||||
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
|
||||
if (!CollectionUtils.isEmpty(multiOrdrDlvylc)) {
|
||||
|
||||
// 배송지 리스트
|
||||
List<LinkedHashMap<String, Object>> dlvylcListMulti = (List<LinkedHashMap<String, Object>>) multiOrdrDlvylc.get("dlvylc");
|
||||
|
||||
/** ----------------------------------------------- 배송지별 주문 상품 수량 검사 START ----------------------------------------------- */
|
||||
content = checkDistributedQyMatchesOrder(goodsList, dlvylcListMulti);
|
||||
if (!"0".equals(content.get("status"))) {
|
||||
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
|
||||
}
|
||||
/** ----------------------------------------------- 배송지별 주문 상품 수량 검사 END ----------------------------------------------- */
|
||||
|
||||
// 부정판매 체크를 위한 배송지 정렬
|
||||
if (!CollectionUtils.isEmpty(dlvylcListMulti)) {
|
||||
|
||||
boolean hasInvalidAddress = dlvylcListMulti.stream().anyMatch(map -> {
|
||||
String dlvylcZip = StringUtil.isNullToString(map.get("dlvylcZip"));
|
||||
String adresDvCd = StringUtil.isNullToString(map.get("dlvylcAdresDvCd"));
|
||||
String dlvylcLnbAdres = StringUtil.isNullToString(map.get("dlvylcLnbAdres"));
|
||||
String dlvylcRnmAdres = StringUtil.isNullToString(map.get("dlvylcRnmAdres"));
|
||||
String adresDtl = StringUtil.isNullToString(map.get("dlvylcAdresDtl"));
|
||||
|
||||
return StringUtil.isEmpty(dlvylcZip)
|
||||
|| StringUtil.isEmpty(adresDvCd)
|
||||
|| ("01".equals(adresDvCd) && StringUtil.isEmpty(dlvylcRnmAdres))
|
||||
|| ("02".equals(adresDvCd) && StringUtil.isEmpty(dlvylcLnbAdres))
|
||||
|| StringUtil.isEmpty(adresDtl);
|
||||
});
|
||||
|
||||
if (hasInvalidAddress) {
|
||||
content.put("result","Y");
|
||||
content.put("message", "배송지 정보를 찾을 수 없습니다. 다시 시도해 주세요.");
|
||||
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
|
||||
}
|
||||
|
||||
List<String> adresList = dlvylcListMulti.stream()
|
||||
.map(map -> {
|
||||
String adresDvCd = StringUtil.isNullToString(map.get("dlvylcAdresDvCd"));
|
||||
String adresDtl = StringUtil.isNullToString(map.get("dlvylcAdresDtl"));
|
||||
String dlvylcLnbAdres = StringUtil.isNullToString(map.get("dlvylcLnbAdres"));
|
||||
String dlvylcRnmAdres = StringUtil.isNullToString(map.get("dlvylcRnmAdres"));
|
||||
String adresMulti;
|
||||
if ("01".equals(adresDvCd)) {
|
||||
adresMulti = dlvylcRnmAdres + " " + adresDtl;
|
||||
} else {
|
||||
adresMulti = dlvylcLnbAdres + " " + adresDtl;
|
||||
}
|
||||
|
||||
return adresMulti;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
adresArray = adresList.toArray(new String[0]);
|
||||
|
||||
List<String> receptMbtlnbList = dlvylcListMulti.stream()
|
||||
.map(map -> {
|
||||
return StringUtil.isNullToString(map.get("recpntMbtlnb"));
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
receptMbtlnbArray = receptMbtlnbList.toArray(new String[0]);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
String dlvylcAdresDvCd = (String) shipping.get("dlvylcAdresDvCd");
|
||||
String dlvylcLnbAdres = (String) shipping.get("dlvylcLnbAdres");
|
||||
String dlvylcRnmAdres = (String) shipping.get("dlvylcRnmAdres");
|
||||
String dlvylcAdresDtl = (String) shipping.get("dlvylcAdresDtl");
|
||||
|
||||
adres = "01".equals(dlvylcAdresDvCd) ? dlvylcRnmAdres + " " + dlvylcAdresDtl : dlvylcLnbAdres + " " + dlvylcAdresDtl;
|
||||
|
||||
String recpntMbtlnb = StringUtil.isNullToString(shipping.get("recpntMbtlnb"));
|
||||
receptMbtlnbArray = new String[]{recpntMbtlnb};
|
||||
// if (
|
||||
// StringUtil.isEmpty((String) shipping.get("dlvylcZip")) ||
|
||||
// StringUtil.isEmpty((String) shipping.get("dlvylcAdresDvCd")) ||
|
||||
// ( "01".equals(shipping.get("dlvylcAdresDvCd")) && StringUtil.isEmpty((String) shipping.get("dlvylcRnmAdres")) ) ||
|
||||
// ( "02".equals(shipping.get("dlvylcAdresDvCd")) && StringUtil.isEmpty((String) shipping.get("dlvylcLnbAdres")) ) ||
|
||||
// StringUtil.isEmpty((String) shipping.get("dlvylcAdresDtl"))
|
||||
// ) {
|
||||
// content.put("result","Y");
|
||||
// content.put("message", "배송지 정보를 찾을 수 없습니다. 다시 시도해 주세요.");
|
||||
// return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
|
||||
// }
|
||||
//
|
||||
// String dlvylcAdresDvCd = (String) shipping.get("dlvylcAdresDvCd");
|
||||
// String dlvylcLnbAdres = (String) shipping.get("dlvylcLnbAdres");
|
||||
// String dlvylcRnmAdres = (String) shipping.get("dlvylcRnmAdres");
|
||||
// String dlvylcAdresDtl = (String) shipping.get("dlvylcAdresDtl");
|
||||
//
|
||||
// adres = "01".equals(dlvylcAdresDvCd) ? dlvylcRnmAdres + " " + dlvylcAdresDtl : dlvylcLnbAdres + " " + dlvylcAdresDtl;
|
||||
//
|
||||
// String recpntMbtlnb = StringUtil.isNullToString(shipping.get("recpntMbtlnb"));
|
||||
// receptMbtlnbArray = new String[]{recpntMbtlnb};
|
||||
} else if ("05".equals(ordrTyCd)) { // 여러곳 배송
|
||||
if (!CollectionUtils.isEmpty(multiOrdrDlvylc)) {
|
||||
|
||||
|
||||
@@ -406,6 +406,8 @@ public class BOMaMtngService {
|
||||
List<LinkedHashMap> goodsList = (List<LinkedHashMap>) param.get("goodsList"); // 상품정보
|
||||
LinkedHashMap enuri = (LinkedHashMap) param.get("enuri"); // 할인정보
|
||||
|
||||
log.debug("selectBOPreOrderValidationList-goodsList: {}",goodsList);
|
||||
|
||||
//사용한 장바구니 쿠폰
|
||||
//비회원의 경우 enuri 자체가 없어서 isEmpty 확인
|
||||
List<LinkedHashMap> usedCartCouponList = new ArrayList<>();
|
||||
|
||||
@@ -138,6 +138,12 @@ public class BOMaSopmalVO extends AbstractVO {
|
||||
/** 주문 자동 구매확정 기간 */
|
||||
private String ordrAtmcPurchsDcsnPd;
|
||||
|
||||
/** 1엔 환율(살때) */
|
||||
private String buyRate;
|
||||
|
||||
/** 1엔 환율(팔때) */
|
||||
private String sellRate;
|
||||
|
||||
/** 마일리지 보유 사용 금액 */
|
||||
private String mlgHoldUseAmt;
|
||||
|
||||
@@ -495,6 +501,9 @@ public class BOMaSopmalVO extends AbstractVO {
|
||||
/** 회원가입 주요문구 */
|
||||
private String joinComptWords;
|
||||
|
||||
/** 구독서비스 안내문구 */
|
||||
private String subsvcGuidanceWords;
|
||||
|
||||
/** 회원등급 정보 */
|
||||
private String mbrGradGroupNm;
|
||||
private String pageDv;
|
||||
|
||||
@@ -81,19 +81,6 @@ public class BOOrderService {
|
||||
log.debug("결제정보 => {} ", new Gson().toJson(setle));
|
||||
log.debug("사은품 => {} ", new Gson().toJson(prsntList));
|
||||
|
||||
/** 여러곳 배송 배송지 세팅 시작 */
|
||||
LinkedHashMap<String, Object> multiOrdrDlvylcMap = new LinkedHashMap<>();
|
||||
List<LinkedHashMap<String, Object>> dlvylcListMulti = new ArrayList<>();
|
||||
|
||||
multiOrdrDlvylcMap = (LinkedHashMap) param.get("multiOrdrDlvylc");
|
||||
log.debug("multiOrdrDlvylcMap : {}", multiOrdrDlvylcMap);
|
||||
if (!CollectionUtils.isEmpty(multiOrdrDlvylcMap)) {
|
||||
// 배송지 리스트
|
||||
dlvylcListMulti = (List<LinkedHashMap<String, Object>>) multiOrdrDlvylcMap.get("dlvylc");
|
||||
log.debug("dlvylcListMulti : {}", dlvylcListMulti);
|
||||
}
|
||||
/** 여러곳 배송 배송지 세팅 종료 */
|
||||
|
||||
String sopmalCd = "";
|
||||
if("01".equals(user.getSysDvCd())){
|
||||
sopmalCd = user.getSopmalCd();
|
||||
@@ -103,6 +90,85 @@ public class BOOrderService {
|
||||
|
||||
String ordrTyCd = (String) param.get("ordrTyCd");
|
||||
|
||||
log.debug("insertMngrOrdrRegist-param : {}", param);
|
||||
|
||||
/* *****************************
|
||||
0. 여러곳 배송 배송지 세팅
|
||||
***************************** */
|
||||
/** 여러곳 배송 배송지 세팅 시작 */
|
||||
LinkedHashMap<String, Object> multiOrdrDlvylcMap = new LinkedHashMap<>();
|
||||
List<LinkedHashMap<String, Object>> dlvylcListMulti = new ArrayList<>();
|
||||
multiOrdrDlvylcMap = (LinkedHashMap) param.get("multiOrdrDlvylc");
|
||||
log.debug("multiOrdrDlvylcMap : {}", multiOrdrDlvylcMap);
|
||||
|
||||
if ("01".equals(ordrTyCd) || "03".equals(ordrTyCd) || "04".equals(ordrTyCd) || "06".equals(ordrTyCd)) { // 일반주문, 회원 개인결제, 정기배송
|
||||
|
||||
for(int i=0;i<goodsList.size();i++) {
|
||||
int goodsQy = (int) goodsList.get(i).get("qy");
|
||||
int dlvyGroupInnb = (int) goodsList.get(i).get("dlvyGroupInnb");
|
||||
String sopmalCode = sopmalCd;
|
||||
|
||||
DataMap shippingParam = new DataMap() {{
|
||||
put("dlvyGroupInnb", dlvyGroupInnb);
|
||||
put("sopmalCd", sopmalCode);
|
||||
}};
|
||||
|
||||
DataMap shippingGrouping = mapper.selectShippingGrouping(shippingParam);
|
||||
|
||||
BigDecimal itemDftDlvyAmt = (BigDecimal) shippingGrouping.get("dftDlvyAmt"); // 기본배송비
|
||||
BigDecimal itemDlvyAmt = itemDftDlvyAmt; // 배송비
|
||||
// String dlvyAreaAditAt = (String) shippingGrouping.get("dlvyAreaAditAt"); // 도서산간 추가 배송비 조건
|
||||
// BigDecimal areaAditDlvyAmt = (BigDecimal) shippingGrouping.get("areaAditDlvyAmt"); // 도서산간 추가 배송비
|
||||
|
||||
List<LinkedHashMap> itemGoodsList = new ArrayList<>();
|
||||
itemGoodsList.add(goodsList.get(i));
|
||||
for (LinkedHashMap<String, Object> itemGoodsMap : itemGoodsList) {
|
||||
itemGoodsMap.put("qy", 1);
|
||||
}
|
||||
List<LinkedHashMap> itempPrsntList = new ArrayList<>();
|
||||
if(!prsntList.isEmpty()){
|
||||
itempPrsntList.add(prsntList.get(i));
|
||||
for (LinkedHashMap<String, Object> itemPrsntMap : itempPrsntList) {
|
||||
itemPrsntMap.put("qy", 1);
|
||||
}
|
||||
}
|
||||
|
||||
for(int j=0;j<goodsQy;j++) {
|
||||
LinkedHashMap<String, Object> dlvyMap = new LinkedHashMap<>();
|
||||
|
||||
dlvyMap.put("dftDlvyAmt", itemDftDlvyAmt.intValue());
|
||||
dlvyMap.put("dlvyAmt", itemDlvyAmt.intValue());
|
||||
dlvyMap.put("couponInnb", 0);
|
||||
dlvyMap.put("dwldCouponInnb", 0);
|
||||
dlvyMap.put("dplctDscntAt", "");
|
||||
dlvyMap.put("otrCouponSmtmUseAt", "");
|
||||
dlvyMap.put("mngrFreeDlvyUseAt", "N");
|
||||
dlvyMap.put("dlvylcZip", shipping.get("dlvylcZip"));
|
||||
dlvyMap.put("recpntNm", shipping.get("recpntNm"));
|
||||
dlvyMap.put("recpntMbtlnb", shipping.get("recpntMbtlnb"));
|
||||
dlvyMap.put("dlvylcAdresDvCd", shipping.get("dlvylcAdresDvCd"));
|
||||
dlvyMap.put("dlvylcLnbAdres", shipping.get("dlvylcLnbAdres"));
|
||||
dlvyMap.put("dlvylcRnmAdres", shipping.get("dlvylcRnmAdres"));
|
||||
dlvyMap.put("dlvylcAdresDtl", shipping.get("dlvylcAdresDtl"));
|
||||
dlvyMap.put("dlvyMssageCn", shipping.get("dlvyMssageCn"));
|
||||
dlvyMap.put("goodsList", itemGoodsList);
|
||||
dlvyMap.put("prsntList", itempPrsntList); //prsntList.get(i));
|
||||
|
||||
dlvylcListMulti.add(dlvyMap);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
} else if ("05".equals(ordrTyCd)) { // 여러곳 배송, 선물하기
|
||||
if (!CollectionUtils.isEmpty(multiOrdrDlvylcMap)) {
|
||||
// 배송지 리스트
|
||||
dlvylcListMulti = (List<LinkedHashMap<String, Object>>) multiOrdrDlvylcMap.get("dlvylc");
|
||||
log.debug("dlvylcListMulti : {}", dlvylcListMulti);
|
||||
}
|
||||
}
|
||||
/** 여러곳 배송 배송지 세팅 종료 */
|
||||
|
||||
/* *****************************
|
||||
1. 주문등록(GC_ORDER)
|
||||
***************************** */
|
||||
@@ -128,122 +194,387 @@ public class BOOrderService {
|
||||
|
||||
BOOrderShippingVO shippingEscrowVO = new BOOrderShippingVO();
|
||||
if ("01".equals(ordrTyCd) || "03".equals(ordrTyCd) || "04".equals(ordrTyCd) || "06".equals(ordrTyCd)) { // 일반주문, 회원 개인결제, 정기배송
|
||||
BOOrderShippingVO shippingVO = new BOOrderShippingVO();
|
||||
log.debug("여러곳 배송 > 배송지별 배송정보 => {} ", new Gson().toJson(dlvylcListMulti));
|
||||
|
||||
shippingVO.setSopmalCd(sopmalCd);
|
||||
shippingVO.setOrdrInnb(ordrInnb);
|
||||
shippingVO.setMngrInnb(orderVO.getMngrInnb());
|
||||
shippingVO.setMbrInnb(orderVO.getMbrInnb());
|
||||
shippingVO.setOrdrSttusCd(orderVO.getOrdrSttusCd());
|
||||
shippingVO.setMngrFreeDlvyUseAt(StringUtil.isNullToString(shipping.get("mngrFreeDlvyUseAt")) != "" ? StringUtil.isNullToString(shipping.get("mngrFreeDlvyUseAt")) : "N");
|
||||
// 짜투리 계산을 위해 상품별 수량 체크
|
||||
List<LinkedHashMap> goodsSetList = new ArrayList<>();
|
||||
for (LinkedHashMap multiGoods : goodsList) {
|
||||
int multiGoodsInnb = (int) multiGoods.get("goodsInnb");
|
||||
int multiGoodsOptnInnb = (int) multiGoods.get("goodsOptnInnb");
|
||||
|
||||
/* *****************************************
|
||||
5. 주문배송 정보 등록(GC_ORDER_SHIPPING)
|
||||
***************************************** */
|
||||
LinkedHashMap baseGoods = goodsList.stream()
|
||||
.filter(goods ->
|
||||
Objects.equals((int) goods.get("goodsInnb"), multiGoodsInnb) &&
|
||||
Objects.equals((int) goods.get("goodsOptnInnb"), multiGoodsOptnInnb)
|
||||
)
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
|
||||
insertShipping(ordrTyCd, shipping, shippingVO);
|
||||
shippingEscrowVO = shippingVO; //에스크로에 보낼 배송정보
|
||||
|
||||
BigInteger ordrDlvyInnb = shippingVO.getOrdrDlvyInnb();
|
||||
|
||||
String mngrFreeDlvyUseAt = (String) shipping.get("mngrFreeDlvyUseAt");
|
||||
|
||||
if ("Y".equals(mngrFreeDlvyUseAt)) { // TODO : cjh : 2025-02-28 무료 배송비 : 'Y' 일 경우 애누리에 할인 금액 세팅 -> 배송비 0원에 여부 데이터만 세팅으로 변경 됌.
|
||||
// BigDecimal dscntAmt = new BigDecimal(StringUtils.hasText((String) enuri.get("enuriAmt")) ? (String) enuri.get("enuriAmt") : "0");
|
||||
// BigDecimal mngrFreeDlvyUseAmt = new BigDecimal((String) shipping.get("mngrFreeDlvyUseAmt"));
|
||||
|
||||
// enuri.put("enuriAmt", dscntAmt.add(mngrFreeDlvyUseAmt).toString());
|
||||
}
|
||||
|
||||
// 분배된 할인 금액 누적
|
||||
BOOrderRestAmtVO discountInfo = new BOOrderRestAmtVO();
|
||||
|
||||
int optionSeqIndex = 1;
|
||||
BOOrderNoVO optionNoVO = new BOOrderNoVO();
|
||||
optionNoVO.setOrdrInnb(ordrInnb);
|
||||
for (int i = 0; i < goodsList.size(); i++) {
|
||||
LinkedHashMap goods = goodsList.get(i);
|
||||
|
||||
boolean isLast = i == goodsList.size() - 1;
|
||||
|
||||
if (!CollectionUtils.isEmpty(goods)) {
|
||||
int goodsInnb = (int) goods.get("goodsInnb");
|
||||
int goodsOptnInnb = (int) goods.get("goodsOptnInnb");
|
||||
int ordrQy = (int) goods.get("qy");
|
||||
|
||||
BOOrderItemVO orderItemVO = insertedGoodsList.stream().filter(obj-> Objects.equals(ordrInnb, obj.getOrdrInnb()) &&
|
||||
Objects.equals(BigInteger.valueOf(goodsInnb), obj.getGoodsInnb())).findAny().orElse(null);
|
||||
|
||||
/* ***********************************************
|
||||
6. 주문 상품 옵션 정보 등록(GC_ORDER_ITEM_OPTION)
|
||||
주문 상품 입력 옵션 정보 등록
|
||||
*********************************************** */
|
||||
if (orderItemVO != null) {
|
||||
BOOrderItemOptnVO itemOptnVO = new BOOrderItemOptnVO();
|
||||
|
||||
itemOptnVO.setSopmalCd(sopmalCd);
|
||||
itemOptnVO.setOrdrGoodsInnb(orderItemVO.getOrdrGoodsInnb());
|
||||
itemOptnVO.setOrdrDlvyInnb(ordrDlvyInnb);
|
||||
itemOptnVO.setOrdrInnb(ordrInnb);
|
||||
itemOptnVO.setOrdrSttusCd("0"); // 주문상태(99:결제실패)
|
||||
|
||||
setGoodsOptn(sopmalCd, goodsInnb, goodsOptnInnb, ordrQy, itemOptnVO); // 상품 옵션정보 세팅
|
||||
|
||||
setDscntDtls(goodsInnb, goodsOptnInnb, null, goodsList, shipping, enuri, itemOptnVO, isLast, isLast, discountInfo); // 상품 할인내역 세팅
|
||||
|
||||
if (StringUtils.hasText((String) purchsr.get("mbrId"))) { // 회원
|
||||
setMlgAmt(ordrTyCd, goodsInnb, goodsOptnInnb, ordrQy, goodsList, itemOptnVO); // 상품 마일리지 정보 세팅
|
||||
} else {
|
||||
itemOptnVO.setMlgAccmlUnit(new BigDecimal(0)); // 마일리지적립금액(개당)
|
||||
itemOptnVO.setMlgAccmlRest(new BigDecimal(0)); // 마일리지적립금액(짜투리)
|
||||
}
|
||||
|
||||
itemOptnVO.setOrdrGoodsOptnInnb(orderNoService.generateOrderItemOptnNo());
|
||||
mapper.insertOrdrGoodsOption(itemOptnVO); // 주문 상품 옵션 정보 등록
|
||||
|
||||
String inputOptn = (String) goods.get("inputOptn");
|
||||
|
||||
if (StringUtils.hasText(inputOptn)) {
|
||||
String[] inputOptns = inputOptn.split("/");
|
||||
|
||||
for (int j = 0; j < inputOptns.length; j++) {
|
||||
String optn = inputOptns[j];
|
||||
String[] optns = optn.split(",");
|
||||
|
||||
BOOrderItemOptnVO inputOptnVO = new BOOrderItemOptnVO();
|
||||
|
||||
inputOptnVO.setSopmalCd(sopmalCd); // 쇼핑몰 코드
|
||||
inputOptnVO.setOrdrGoodsInnb(orderItemVO.getOrdrGoodsInnb()); // 주문상품 고유번호
|
||||
inputOptnVO.setOrdrDlvyInnb(ordrDlvyInnb); // 주문배송 고유번호
|
||||
inputOptnVO.setOrdrSttusCd(orderVO.getOrdrSttusCd());
|
||||
inputOptnVO.setRelateOrdrGoodsOptnInnb(itemOptnVO.getOrdrGoodsOptnInnb());
|
||||
|
||||
setGoodsOptn(optns[0], Integer.parseInt(optns[1]), Integer.parseInt(optns[2]), 0, inputOptnVO);
|
||||
|
||||
if (i == 0) {
|
||||
inputOptnVO.setOptnVal1(optns[3]);
|
||||
} else if (i == 1) {
|
||||
inputOptnVO.setOptnVal2(optns[3]);
|
||||
} else if (i == 2) {
|
||||
inputOptnVO.setOptnVal3(optns[3]);
|
||||
} else if (i == 3) {
|
||||
inputOptnVO.setOptnVal4(optns[3]);
|
||||
}
|
||||
|
||||
itemOptnVO.setOrdrGoodsOptnInnb(orderNoService.generateOrderItemOptnNo());
|
||||
mapper.insertOrdrGoodsOption(inputOptnVO); // 주문 상품 입력 옵션 정보 등록
|
||||
}
|
||||
}
|
||||
}
|
||||
if (baseGoods != null) {
|
||||
LinkedHashMap merged = new LinkedHashMap<>(baseGoods);
|
||||
merged.put("setQy", 0);
|
||||
goodsSetList.add(merged);
|
||||
}
|
||||
}
|
||||
|
||||
/* ***********************************************************
|
||||
7. 주문 상품 옵션(사은품) 정보 등록(GC_ORDER_ITEM_OPTION)
|
||||
*********************************************************** */
|
||||
if (!CollectionUtils.isEmpty(prsntList)) {
|
||||
insertPrsnt(sopmalCd, ordrInnb, shippingVO.getOrdrDlvyInnb(), prsntList);
|
||||
log.debug("상품별 수량 체크 : {}", goodsSetList);
|
||||
|
||||
|
||||
if (!CollectionUtils.isEmpty(dlvylcListMulti)) {
|
||||
|
||||
// 배송지별 상품 수량 합산 - isLast 찾기 위함.
|
||||
List<LinkedHashMap<String, Object>> allMergedGoodsList = new ArrayList<>();
|
||||
|
||||
for (LinkedHashMap<String, Object> dlvylcMapMulti : dlvylcListMulti) {
|
||||
List<LinkedHashMap> goodsListMulti = (List<LinkedHashMap>) dlvylcMapMulti.get("goodsList");
|
||||
|
||||
for (LinkedHashMap multiGoods : goodsListMulti) {
|
||||
int multiGoodsInnb = (int) multiGoods.get("goodsInnb");
|
||||
int multiGoodsOptnInnb = (int) multiGoods.get("goodsOptnInnb");
|
||||
|
||||
LinkedHashMap baseGoods = goodsList.stream()
|
||||
.filter(goods ->
|
||||
Objects.equals((int) goods.get("goodsInnb"), multiGoodsInnb) &&
|
||||
Objects.equals((int) goods.get("goodsOptnInnb"), multiGoodsOptnInnb)
|
||||
)
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
|
||||
if (baseGoods != null) {
|
||||
LinkedHashMap<String, Object> merged = new LinkedHashMap<>(baseGoods);
|
||||
allMergedGoodsList.add(merged);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 분배된 할인 금액 누적
|
||||
BOOrderRestAmtVO discountInfo = new BOOrderRestAmtVO();
|
||||
int allGoodsCount = 0; // 전체 상품 순번
|
||||
|
||||
for (LinkedHashMap<String, Object> dlvylcMapMulti : dlvylcListMulti) {
|
||||
log.debug("dlvylcMapMulti : {}", dlvylcMapMulti);
|
||||
|
||||
BOOrderShippingVO shippingVO = new BOOrderShippingVO();
|
||||
|
||||
shippingVO.setSopmalCd(sopmalCd);
|
||||
shippingVO.setOrdrInnb(ordrInnb);
|
||||
shippingVO.setMngrInnb(orderVO.getMngrInnb());
|
||||
shippingVO.setMbrInnb(orderVO.getMbrInnb());
|
||||
shippingVO.setOrdrSttusCd(orderVO.getOrdrSttusCd());
|
||||
shippingVO.setMngrFreeDlvyUseAt(StringUtil.isNullToString(dlvylcMapMulti.get("mngrFreeDlvyUseAt")) != "" ? StringUtil.isNullToString(dlvylcMapMulti.get("mngrFreeDlvyUseAt")) : "N");
|
||||
|
||||
/* *****************************************
|
||||
5. 주문배송 정보 등록(GC_ORDER_SHIPPING)
|
||||
***************************************** */
|
||||
insertShipping(ordrTyCd, dlvylcMapMulti, shippingVO);
|
||||
shippingEscrowVO = shippingVO; //에스크로에 보낼 배송정보
|
||||
|
||||
BigInteger ordrDlvyInnb = shippingVO.getOrdrDlvyInnb();
|
||||
|
||||
String mngrFreeDlvyUseAt = (String) dlvylcMapMulti.get("mngrFreeDlvyUseAt");
|
||||
|
||||
if ("Y".equals(mngrFreeDlvyUseAt)) { // TODO : cjh : 2025-02-28 무료 배송비 : 'Y' 일 경우 애누리에 할인 금액 세팅 -> 배송비 0원에 여부 데이터만 세팅으로 변경 됌.
|
||||
// BigDecimal dscntAmt = new BigDecimal(StringUtils.hasText((String) enuri.get("enuriAmt")) ? (String) enuri.get("enuriAmt") : "0");
|
||||
// BigDecimal mngrFreeDlvyUseAmt = new BigDecimal((String) dlvylcMapMulti.get("mngrFreeDlvyUseAmt"));
|
||||
|
||||
// enuri.put("enuriAmt", dscntAmt.add(mngrFreeDlvyUseAmt).toString());
|
||||
}
|
||||
|
||||
|
||||
List<LinkedHashMap> goodsListMulti = (List<LinkedHashMap>) dlvylcMapMulti.get("goodsList");
|
||||
|
||||
List<LinkedHashMap> mergedGoodsList = new ArrayList<>();
|
||||
|
||||
/** CJH
|
||||
* 배송지별 상품 정보 머지
|
||||
* 여러곳 배송일 경우 서버에서 계산해온 상품 정보를 배송지별 수량에 맞게 분배하다보니
|
||||
* 상품 정보와 배송지별 수량정보를 합쳐주는 작업이 필요함
|
||||
* * 일반 주분에서 이벤트 할인 금액, 쿠폰 적용 처리, 적립 마일리지 계산을 배송지별로 계속해서 계산하는데에 어려움이 있어 상품은 유지하고 배송지별로 분배하는 방법을 채택함.
|
||||
*/
|
||||
for (LinkedHashMap multiGoods : goodsListMulti) {
|
||||
int multiGoodsInnb = (int) multiGoods.get("goodsInnb");
|
||||
int multiGoodsOptnInnb = (int) multiGoods.get("goodsOptnInnb");
|
||||
|
||||
// 머지대상
|
||||
int qy = (int) multiGoods.get("qy"); // 주문 수량
|
||||
|
||||
// goodsList에서 상세 정보 찾기
|
||||
LinkedHashMap baseGoods = goodsList.stream()
|
||||
.filter(goods ->
|
||||
Objects.equals((int) goods.get("goodsInnb"), multiGoodsInnb) &&
|
||||
Objects.equals((int) goods.get("goodsOptnInnb"), multiGoodsOptnInnb)
|
||||
)
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
|
||||
if (baseGoods != null) {
|
||||
// 병합
|
||||
LinkedHashMap<String, Object> merged = new LinkedHashMap<>(baseGoods);
|
||||
merged.put("baseQy", merged.get("qy")); // 총 상품별 주문 수량 유지
|
||||
merged.put("qy", qy); // 수량은 배송지별 정보 우선
|
||||
mergedGoodsList.add(merged);
|
||||
}
|
||||
}
|
||||
|
||||
log.debug("머지 작업 후 mergedGoodsList : {}", mergedGoodsList);
|
||||
log.debug("머지 작업 후 goodsList : {}", goodsList);
|
||||
|
||||
|
||||
/** ------------------------------------------- 사은품 세팅 시작 ------------------------------------------- */
|
||||
List<LinkedHashMap> prsntListMulti = (List<LinkedHashMap>) dlvylcMapMulti.get("prsntList");
|
||||
|
||||
List<LinkedHashMap> mergedPrsntList = new ArrayList<>();
|
||||
|
||||
/** CJH
|
||||
* 배송지별 상품 정보 머지
|
||||
* 여러곳 배송일 경우 서버에서 계산해온 상품 정보를 배송지별 수량에 맞게 분배하다보니
|
||||
* 상품 정보와 배송지별 수량정보를 합쳐주는 작업이 필요함
|
||||
* * 일반 주분에서 이벤트 할인 금액, 쿠폰 적용 처리, 적립 마일리지 계산을 배송지별로 계속해서 계산하는데에 어려움이 있어 상품은 유지하고 배송지별로 분배하는 방법을 채택함.
|
||||
*/
|
||||
for (LinkedHashMap multiGoods : prsntListMulti) {
|
||||
int multiGoodsInnb = (int) multiGoods.get("goodsInnb");
|
||||
int multiGoodsOptnInnb = (int) multiGoods.get("goodsOptnInnb");
|
||||
|
||||
// 머지대상
|
||||
int qy = (int) multiGoods.get("provdCnt"); // 주문 수량
|
||||
|
||||
// goodsList에서 상세 정보 찾기
|
||||
LinkedHashMap baseGoods = prsntList.stream()
|
||||
.filter(goods ->
|
||||
Objects.equals((int) goods.get("goodsInnb"), multiGoodsInnb) &&
|
||||
Objects.equals((int) goods.get("goodsOptnInnb"), multiGoodsOptnInnb)
|
||||
)
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
|
||||
if (baseGoods != null) {
|
||||
// 병합
|
||||
LinkedHashMap<String, Object> merged = new LinkedHashMap<>(baseGoods);
|
||||
merged.put("baseQy", merged.get("provdCnt")); // 총 상품별 주문 수량 유지
|
||||
merged.put("provdCnt", qy); // 수량은 배송지별 정보 우선
|
||||
mergedPrsntList.add(merged);
|
||||
}
|
||||
}
|
||||
|
||||
log.debug("머지 작업 후 mergedPrsntList : {}", mergedPrsntList);
|
||||
log.debug("머지 작업 후 prsntList : {}", prsntList);
|
||||
/** ------------------------------------------- 사은품 세팅 끝 ------------------------------------------- */
|
||||
|
||||
|
||||
|
||||
for (int i = 0; i < mergedGoodsList.size(); i++) {
|
||||
LinkedHashMap goods = mergedGoodsList.get(i);
|
||||
|
||||
boolean isLast = allGoodsCount == allMergedGoodsList.size() - 1;
|
||||
|
||||
if (!CollectionUtils.isEmpty(goods)) {
|
||||
int goodsInnb = (int) goods.get("goodsInnb");
|
||||
int goodsOptnInnb = (int) goods.get("goodsOptnInnb");
|
||||
int ordrQy = (int) goods.get("qy");
|
||||
|
||||
BOOrderItemVO orderItemVO = insertedGoodsList.stream().filter(obj-> Objects.equals(ordrInnb, obj.getOrdrInnb()) &&
|
||||
Objects.equals(BigInteger.valueOf(goodsInnb), obj.getGoodsInnb())).findAny().orElse(null);
|
||||
|
||||
/* ***********************************************
|
||||
6. 주문 상품 옵션 정보 등록(GC_ORDER_ITEM_OPTION)
|
||||
주문 상품 입력 옵션 정보 등록
|
||||
*********************************************** */
|
||||
if (orderItemVO != null) {
|
||||
BOOrderItemOptnVO itemOptnVO = new BOOrderItemOptnVO();
|
||||
|
||||
itemOptnVO.setSopmalCd(sopmalCd);
|
||||
itemOptnVO.setOrdrGoodsInnb(orderItemVO.getOrdrGoodsInnb());
|
||||
itemOptnVO.setOrdrDlvyInnb(ordrDlvyInnb);
|
||||
itemOptnVO.setOrdrInnb(ordrInnb);
|
||||
itemOptnVO.setOrdrSttusCd("0"); // 주문상태(99:결제실패)
|
||||
|
||||
setGoodsOptn(sopmalCd, goodsInnb, goodsOptnInnb, ordrQy, itemOptnVO); // 상품 옵션정보 세팅
|
||||
|
||||
LinkedHashMap goodsSet = goodsSetList.stream().filter(obj-> Objects.equals(goodsInnb, obj.get("goodsInnb")) && Objects.equals(goodsOptnInnb, obj.get("goodsOptnInnb"))).findAny().orElse(null);
|
||||
|
||||
setDscntDtlsMulti(goodsInnb, goodsOptnInnb, null, mergedGoodsList, dlvylcMapMulti, enuri, itemOptnVO, isLast, isLast, discountInfo, goodsList, goodsSet); // 상품 할인내역 세팅 - 여러곳 배송
|
||||
|
||||
if (StringUtils.hasText((String) purchsr.get("mbrId"))) { // 회원
|
||||
setMlgAmtMulti(ordrTyCd, goodsInnb, goodsOptnInnb, ordrQy, mergedGoodsList, itemOptnVO, goodsSet); // 상품 마일리지 정보 세팅 - 여러곳 배송
|
||||
} else {
|
||||
itemOptnVO.setMlgAccmlUnit(new BigDecimal(0)); // 마일리지적립금액(개당)
|
||||
itemOptnVO.setMlgAccmlRest(new BigDecimal(0)); // 마일리지적립금액(짜투리)
|
||||
}
|
||||
|
||||
itemOptnVO.setOrdrGoodsOptnInnb(orderNoService.generateOrderItemOptnNo());
|
||||
mapper.insertOrdrGoodsOption(itemOptnVO); // 주문 상품 옵션 정보 등록
|
||||
|
||||
// 상품별 수량 체크
|
||||
goodsSet.put("setQy", (int) goodsSet.get("setQy") + ordrQy);
|
||||
|
||||
String inputOptn = (String) goods.get("inputOptn");
|
||||
|
||||
if (StringUtils.hasText(inputOptn)) {
|
||||
String[] inputOptns = inputOptn.split("/");
|
||||
|
||||
for (int j = 0; j < inputOptns.length; j++) {
|
||||
String optn = inputOptns[j];
|
||||
String[] optns = optn.split(",");
|
||||
|
||||
BOOrderItemOptnVO inputOptnVO = new BOOrderItemOptnVO();
|
||||
|
||||
inputOptnVO.setSopmalCd(sopmalCd); // 쇼핑몰 코드
|
||||
inputOptnVO.setOrdrGoodsInnb(orderItemVO.getOrdrGoodsInnb()); // 주문상품 고유번호
|
||||
inputOptnVO.setOrdrDlvyInnb(ordrDlvyInnb); // 주문배송 고유번호
|
||||
inputOptnVO.setOrdrSttusCd(orderVO.getOrdrSttusCd());
|
||||
inputOptnVO.setRelateOrdrGoodsOptnInnb(itemOptnVO.getOrdrGoodsOptnInnb());
|
||||
|
||||
setGoodsOptn(optns[0], Integer.parseInt(optns[1]), Integer.parseInt(optns[2]), 0, inputOptnVO);
|
||||
|
||||
if (i == 0) {
|
||||
inputOptnVO.setOptnVal1(optns[3]);
|
||||
} else if (i == 1) {
|
||||
inputOptnVO.setOptnVal2(optns[3]);
|
||||
} else if (i == 2) {
|
||||
inputOptnVO.setOptnVal3(optns[3]);
|
||||
} else if (i == 3) {
|
||||
inputOptnVO.setOptnVal4(optns[3]);
|
||||
}
|
||||
|
||||
itemOptnVO.setOrdrGoodsOptnInnb(orderNoService.generateOrderItemOptnNo());
|
||||
mapper.insertOrdrGoodsOption(inputOptnVO); // 주문 상품 입력 옵션 정보 등록
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 전체 수량의 마지막 체크
|
||||
allGoodsCount = allGoodsCount + 1;
|
||||
}
|
||||
|
||||
/* ***********************************************************
|
||||
7. 주문 상품 옵션(사은품) 정보 등록(GC_ORDER_ITEM_OPTION)
|
||||
*********************************************************** */
|
||||
if (!CollectionUtils.isEmpty(prsntList)) {
|
||||
insertPrsnt(sopmalCd, ordrInnb, ordrDlvyInnb, mergedPrsntList);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// BOOrderShippingVO shippingVO = new BOOrderShippingVO();
|
||||
//
|
||||
// shippingVO.setSopmalCd(sopmalCd);
|
||||
// shippingVO.setOrdrInnb(ordrInnb);
|
||||
// shippingVO.setMngrInnb(orderVO.getMngrInnb());
|
||||
// shippingVO.setMbrInnb(orderVO.getMbrInnb());
|
||||
// shippingVO.setOrdrSttusCd(orderVO.getOrdrSttusCd());
|
||||
// shippingVO.setMngrFreeDlvyUseAt(StringUtil.isNullToString(shipping.get("mngrFreeDlvyUseAt")) != "" ? StringUtil.isNullToString(shipping.get("mngrFreeDlvyUseAt")) : "N");
|
||||
//
|
||||
// /* *****************************************
|
||||
// 5. 주문배송 정보 등록(GC_ORDER_SHIPPING)
|
||||
// ***************************************** */
|
||||
//
|
||||
// insertShipping(ordrTyCd, shipping, shippingVO);
|
||||
// shippingEscrowVO = shippingVO; //에스크로에 보낼 배송정보
|
||||
//
|
||||
// BigInteger ordrDlvyInnb = shippingVO.getOrdrDlvyInnb();
|
||||
//
|
||||
// String mngrFreeDlvyUseAt = (String) shipping.get("mngrFreeDlvyUseAt");
|
||||
//
|
||||
// if ("Y".equals(mngrFreeDlvyUseAt)) { // TODO : cjh : 2025-02-28 무료 배송비 : 'Y' 일 경우 애누리에 할인 금액 세팅 -> 배송비 0원에 여부 데이터만 세팅으로 변경 됌.
|
||||
//// BigDecimal dscntAmt = new BigDecimal(StringUtils.hasText((String) enuri.get("enuriAmt")) ? (String) enuri.get("enuriAmt") : "0");
|
||||
//// BigDecimal mngrFreeDlvyUseAmt = new BigDecimal((String) shipping.get("mngrFreeDlvyUseAmt"));
|
||||
//
|
||||
// // enuri.put("enuriAmt", dscntAmt.add(mngrFreeDlvyUseAmt).toString());
|
||||
// }
|
||||
//
|
||||
// // 분배된 할인 금액 누적
|
||||
// BOOrderRestAmtVO discountInfo = new BOOrderRestAmtVO();
|
||||
//
|
||||
// int optionSeqIndex = 1;
|
||||
// BOOrderNoVO optionNoVO = new BOOrderNoVO();
|
||||
// optionNoVO.setOrdrInnb(ordrInnb);
|
||||
// for (int i = 0; i < goodsList.size(); i++) {
|
||||
// LinkedHashMap goods = goodsList.get(i);
|
||||
//
|
||||
// boolean isLast = i == goodsList.size() - 1;
|
||||
//
|
||||
// if (!CollectionUtils.isEmpty(goods)) {
|
||||
// int goodsInnb = (int) goods.get("goodsInnb");
|
||||
// int goodsOptnInnb = (int) goods.get("goodsOptnInnb");
|
||||
// int ordrQy = (int) goods.get("qy");
|
||||
//
|
||||
// BOOrderItemVO orderItemVO = insertedGoodsList.stream().filter(obj-> Objects.equals(ordrInnb, obj.getOrdrInnb()) &&
|
||||
// Objects.equals(BigInteger.valueOf(goodsInnb), obj.getGoodsInnb())).findAny().orElse(null);
|
||||
//
|
||||
// /* ***********************************************
|
||||
// 6. 주문 상품 옵션 정보 등록(GC_ORDER_ITEM_OPTION)
|
||||
// 주문 상품 입력 옵션 정보 등록
|
||||
// *********************************************** */
|
||||
// if (orderItemVO != null) {
|
||||
// BOOrderItemOptnVO itemOptnVO = new BOOrderItemOptnVO();
|
||||
//
|
||||
// itemOptnVO.setSopmalCd(sopmalCd);
|
||||
// itemOptnVO.setOrdrGoodsInnb(orderItemVO.getOrdrGoodsInnb());
|
||||
// itemOptnVO.setOrdrDlvyInnb(ordrDlvyInnb);
|
||||
// itemOptnVO.setOrdrInnb(ordrInnb);
|
||||
// itemOptnVO.setOrdrSttusCd("0"); // 주문상태(99:결제실패)
|
||||
//
|
||||
// setGoodsOptn(sopmalCd, goodsInnb, goodsOptnInnb, ordrQy, itemOptnVO); // 상품 옵션정보 세팅
|
||||
//
|
||||
// setDscntDtls(goodsInnb, goodsOptnInnb, null, goodsList, shipping, enuri, itemOptnVO, isLast, isLast, discountInfo); // 상품 할인내역 세팅
|
||||
//
|
||||
// if (StringUtils.hasText((String) purchsr.get("mbrId"))) { // 회원
|
||||
// setMlgAmt(ordrTyCd, goodsInnb, goodsOptnInnb, ordrQy, goodsList, itemOptnVO); // 상품 마일리지 정보 세팅
|
||||
// } else {
|
||||
// itemOptnVO.setMlgAccmlUnit(new BigDecimal(0)); // 마일리지적립금액(개당)
|
||||
// itemOptnVO.setMlgAccmlRest(new BigDecimal(0)); // 마일리지적립금액(짜투리)
|
||||
// }
|
||||
//
|
||||
// itemOptnVO.setOrdrGoodsOptnInnb(orderNoService.generateOrderItemOptnNo());
|
||||
// mapper.insertOrdrGoodsOption(itemOptnVO); // 주문 상품 옵션 정보 등록
|
||||
//
|
||||
// String inputOptn = (String) goods.get("inputOptn");
|
||||
//
|
||||
// if (StringUtils.hasText(inputOptn)) {
|
||||
// String[] inputOptns = inputOptn.split("/");
|
||||
//
|
||||
// for (int j = 0; j < inputOptns.length; j++) {
|
||||
// String optn = inputOptns[j];
|
||||
// String[] optns = optn.split(",");
|
||||
//
|
||||
// BOOrderItemOptnVO inputOptnVO = new BOOrderItemOptnVO();
|
||||
//
|
||||
// inputOptnVO.setSopmalCd(sopmalCd); // 쇼핑몰 코드
|
||||
// inputOptnVO.setOrdrGoodsInnb(orderItemVO.getOrdrGoodsInnb()); // 주문상품 고유번호
|
||||
// inputOptnVO.setOrdrDlvyInnb(ordrDlvyInnb); // 주문배송 고유번호
|
||||
// inputOptnVO.setOrdrSttusCd(orderVO.getOrdrSttusCd());
|
||||
// inputOptnVO.setRelateOrdrGoodsOptnInnb(itemOptnVO.getOrdrGoodsOptnInnb());
|
||||
//
|
||||
// setGoodsOptn(optns[0], Integer.parseInt(optns[1]), Integer.parseInt(optns[2]), 0, inputOptnVO);
|
||||
//
|
||||
// if (i == 0) {
|
||||
// inputOptnVO.setOptnVal1(optns[3]);
|
||||
// } else if (i == 1) {
|
||||
// inputOptnVO.setOptnVal2(optns[3]);
|
||||
// } else if (i == 2) {
|
||||
// inputOptnVO.setOptnVal3(optns[3]);
|
||||
// } else if (i == 3) {
|
||||
// inputOptnVO.setOptnVal4(optns[3]);
|
||||
// }
|
||||
//
|
||||
// itemOptnVO.setOrdrGoodsOptnInnb(orderNoService.generateOrderItemOptnNo());
|
||||
// mapper.insertOrdrGoodsOption(inputOptnVO); // 주문 상품 입력 옵션 정보 등록
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// /* ***********************************************************
|
||||
// 7. 주문 상품 옵션(사은품) 정보 등록(GC_ORDER_ITEM_OPTION)
|
||||
// *********************************************************** */
|
||||
// if (!CollectionUtils.isEmpty(prsntList)) {
|
||||
// insertPrsnt(sopmalCd, ordrInnb, shippingVO.getOrdrDlvyInnb(), prsntList);
|
||||
// }
|
||||
} else if ("05".equals(ordrTyCd)) { // 여러곳 배송, 선물하기
|
||||
log.debug("여러곳 배송 > 배송지별 배송정보 => {} ", new Gson().toJson(dlvylcListMulti));
|
||||
|
||||
@@ -1219,18 +1550,30 @@ public class BOOrderService {
|
||||
shippingVO.setDlvyMthCd("01"); // 택배
|
||||
|
||||
if ("01".equals(ordrTyCd) || "03".equals(ordrTyCd) || "06".equals(ordrTyCd)) { // 일반주문, 회원개인결제, 정기배송
|
||||
shippingVO.setRecpntNm((String) shipping.get("recpntNm"));
|
||||
shippingVO.setRecpntTelnb((String) shipping.get("recpntTelnb"));
|
||||
shippingVO.setRecpntMbtlnb((String) shipping.get("recpntMbtlnb"));
|
||||
shippingVO.setRecpntNm(StringUtil.isNullToString(shipping.get("recpntNm")));
|
||||
shippingVO.setRecpntTelnb(StringUtil.isNullToString(shipping.get("recpntTelnb")));
|
||||
shippingVO.setRecpntMbtlnb(StringUtil.isNullToString(shipping.get("recpntMbtlnb")));
|
||||
|
||||
shippingVO.setDlvylcZip((String) shipping.get("dlvylcZip"));
|
||||
shippingVO.setDlvylcAdresDvCd((String) shipping.get("dlvylcAdresDvCd"));
|
||||
shippingVO.setDlvylcLnbAdres((String) shipping.get("dlvylcLnbAdres"));
|
||||
shippingVO.setDlvylcRnmAdres((String) shipping.get("dlvylcRnmAdres"));
|
||||
shippingVO.setDlvylcAdresDtl((String) shipping.get("dlvylcAdresDtl"));
|
||||
shippingVO.setDlvylcZip(StringUtil.isNullToString(shipping.get("dlvylcZip")));
|
||||
shippingVO.setDlvylcAdresDvCd(StringUtil.isNullToString(shipping.get("dlvylcAdresDvCd")));
|
||||
shippingVO.setDlvylcLnbAdres(StringUtil.isNullToString(shipping.get("dlvylcLnbAdres")));
|
||||
shippingVO.setDlvylcRnmAdres(StringUtil.isNullToString(shipping.get("dlvylcRnmAdres")));
|
||||
shippingVO.setDlvylcAdresDtl(StringUtil.isNullToString(shipping.get("dlvylcAdresDtl")));
|
||||
|
||||
shippingVO.setDlvyMssageCn((String) shipping.get("dlvyMssageCn"));
|
||||
shippingVO.setDlvyCycleCd((String) shipping.get("dlvyCycleCd"));
|
||||
shippingVO.setDlvyMssageCn(StringUtil.isNullToString(shipping.get("dlvyMssageCn")));
|
||||
shippingVO.setDlvyCycleCd(StringUtil.isNullToString(shipping.get("dlvyCycleCd")));
|
||||
// shippingVO.setRecpntNm((String) shipping.get("recpntNm"));
|
||||
// shippingVO.setRecpntTelnb((String) shipping.get("recpntTelnb"));
|
||||
// shippingVO.setRecpntMbtlnb((String) shipping.get("recpntMbtlnb"));
|
||||
//
|
||||
// shippingVO.setDlvylcZip((String) shipping.get("dlvylcZip"));
|
||||
// shippingVO.setDlvylcAdresDvCd((String) shipping.get("dlvylcAdresDvCd"));
|
||||
// shippingVO.setDlvylcLnbAdres((String) shipping.get("dlvylcLnbAdres"));
|
||||
// shippingVO.setDlvylcRnmAdres((String) shipping.get("dlvylcRnmAdres"));
|
||||
// shippingVO.setDlvylcAdresDtl((String) shipping.get("dlvylcAdresDtl"));
|
||||
//
|
||||
// shippingVO.setDlvyMssageCn((String) shipping.get("dlvyMssageCn"));
|
||||
// shippingVO.setDlvyCycleCd((String) shipping.get("dlvyCycleCd"));
|
||||
}
|
||||
|
||||
if ("05".equals(ordrTyCd)) { // 여러곳 배송
|
||||
@@ -2194,6 +2537,9 @@ public class BOOrderService {
|
||||
throw new WnbtRestException("주문배송 정보를 찾을 수 없습니다.");
|
||||
}
|
||||
} else {
|
||||
// if (CollectionUtils.isEmpty(multiOrdrDlvylc)) {
|
||||
// throw new WnbtRestException("주문배송 정보를 찾을 수 없습니다.");
|
||||
// }
|
||||
if (CollectionUtils.isEmpty(shipping)) {
|
||||
throw new WnbtRestException("주문배송 정보를 찾을 수 없습니다.");
|
||||
}
|
||||
|
||||
@@ -177,6 +177,7 @@ public class BOPurchsService {
|
||||
public DataMap selectDftDlvylc(BOPurchsrVO purchsrVO) {
|
||||
DataMap dftDlvylc = new DataMap();
|
||||
|
||||
//기본배송지여부
|
||||
purchsrVO.setDftDlvylcAt("Y");
|
||||
|
||||
List<DataMap> dlvylcAdresList = mapper.selectDlvylcList(purchsrVO);
|
||||
@@ -1854,6 +1855,8 @@ public class BOPurchsService {
|
||||
}};
|
||||
|
||||
String defaultAdressAt = "";
|
||||
String dlvylcAreaCd = (String) param.get("dlvylcAreaCd");
|
||||
String prefcd = (String) param.get("prefcd");
|
||||
|
||||
List<LinkedHashMap> goodsList = (List<LinkedHashMap>) param.get("goodsList");
|
||||
|
||||
@@ -1922,7 +1925,7 @@ public class BOPurchsService {
|
||||
if (dlvylc.get("dlvyAmt") != null) {
|
||||
dlvyAmtBydlvylc = dlvyAmtBydlvylc + castAmt(dlvylc, "dlvyAmt");
|
||||
} else {
|
||||
dlvyAmtMap = getDlvyAmt(goodsList, sopmalCd, defaultAdressAt);
|
||||
dlvyAmtMap = getDlvyAmt(goodsList, sopmalCd, defaultAdressAt, dlvylcAreaCd);
|
||||
|
||||
if (!CollectionUtils.isEmpty(dlvyAmtMap)) {
|
||||
dlvyAmtBydlvylc = ((BigDecimal) dlvyAmtMap.get("dlvyAmt")).intValue();
|
||||
@@ -1947,7 +1950,7 @@ public class BOPurchsService {
|
||||
if (dlvylcMap.get("dlvyAmt") != null) {
|
||||
dlvyAmtBydlvylc = dlvyAmtBydlvylc + castAmt(dlvylcMap, "dlvyAmt");
|
||||
} else {
|
||||
dlvyAmtMap = getDlvyAmt(goodsList, sopmalCd, defaultAdressAt);
|
||||
dlvyAmtMap = getDlvyAmt(goodsList, sopmalCd, defaultAdressAt, dlvylcAreaCd);
|
||||
|
||||
if (!CollectionUtils.isEmpty(dlvyAmtMap)) {
|
||||
dlvyAmtBydlvylc = ((BigDecimal) dlvyAmtMap.get("dlvyAmt")).intValue();
|
||||
@@ -1958,7 +1961,7 @@ public class BOPurchsService {
|
||||
dlvyAmt = new BigDecimal(dlvyAmtBydlvylc);
|
||||
}
|
||||
} else {
|
||||
dlvyAmtMap = getDlvyAmt(goodsList, sopmalCd, defaultAdressAt);
|
||||
dlvyAmtMap = getDlvyAmt(goodsList, sopmalCd, defaultAdressAt, dlvylcAreaCd);
|
||||
|
||||
if (!CollectionUtils.isEmpty(dlvyAmtMap)) {
|
||||
dlvyAmt = (BigDecimal) dlvyAmtMap.get("dlvyAmt");
|
||||
@@ -2104,9 +2107,10 @@ public class BOPurchsService {
|
||||
* @param goodsList
|
||||
* @return List<DataMap>
|
||||
*/
|
||||
public DataMap getDlvyAmt(List<LinkedHashMap> goodsList, String sopmalCd, String defaultAdressAt) {
|
||||
public DataMap getDlvyAmt(List<LinkedHashMap> goodsList, String sopmalCd, String defaultAdressAt, String dlvylcAreaCd) {
|
||||
DataMap dlvyAmtMap = null;
|
||||
log.debug("우편번호 확인 : {}", defaultAdressAt);
|
||||
log.debug("getDlvyAmt-goodsList : {}", goodsList);
|
||||
|
||||
BigDecimal rlDlvyAmt = new BigDecimal(0); // 실 최종 배송비
|
||||
|
||||
@@ -2171,45 +2175,65 @@ public class BOPurchsService {
|
||||
|
||||
DataMap shippingGrouping = mapper.selectShippingGrouping(param);
|
||||
|
||||
//"KR".equals(dlvylcAreaCd)인 경우
|
||||
String dlvyGroupDvCd = (String) shippingGrouping.get("dlvyGroupDvCd");
|
||||
BigDecimal dftDlvyAmt = (BigDecimal) shippingGrouping.get("dftDlvyAmt"); // 기본배송비
|
||||
BigDecimal dlvyAmt = dftDlvyAmt; // 배송비
|
||||
String dlvyAreaAditAt = (String) shippingGrouping.get("dlvyAreaAditAt"); // 도서산간 추가 배송비 조건
|
||||
BigDecimal areaAditDlvyAmt = (BigDecimal) shippingGrouping.get("areaAditDlvyAmt"); // 도서산간 추가 배송비
|
||||
String amtCndUseAt = (String) shippingGrouping.get("amtCndUseAt"); // 금액조건
|
||||
BigDecimal amtCndAditAmt = (BigDecimal) shippingGrouping.get("amtCndAditAmt");
|
||||
String cntCndUseAt = (String) shippingGrouping.get("cntCndUseAt"); // 수량조건
|
||||
BigDecimal cntCndAditAmt = (BigDecimal) shippingGrouping.get("cntCndAditAmt"); // 수량
|
||||
|
||||
if("JP".equals(dlvylcAreaCd)){
|
||||
// dlvyGroupDvCd = (String) shippingGrouping.get("dlvyGroupDvCd2");
|
||||
dftDlvyAmt = (BigDecimal) shippingGrouping.get("dftDlvyAmt2"); // 기본배송비
|
||||
dlvyAmt = dftDlvyAmt; // 배송비
|
||||
dlvyAreaAditAt = (String) shippingGrouping.get("dlvyAreaAditAt2"); // 도서산간 추가 배송비 조건
|
||||
areaAditDlvyAmt = (BigDecimal) shippingGrouping.get("areaAditDlvyAmt2"); // 도서산간 추가 배송비
|
||||
amtCndUseAt = (String) shippingGrouping.get("amtCndUseAt2"); // 금액조건
|
||||
amtCndAditAmt = (BigDecimal) shippingGrouping.get("amtCndAditAmt");
|
||||
cntCndUseAt = (String) shippingGrouping.get("cntCndUseAt2"); // 수량조건
|
||||
cntCndAditAmt = (BigDecimal) shippingGrouping.get("cntCndAditAmt2"); // 수량
|
||||
}
|
||||
|
||||
// 무료배송(조건부)
|
||||
if ("01".equals(dlvyGroupDvCd)) {
|
||||
// 조건(적용상품이 1건일 경우)
|
||||
String amtCndUseAt = (String) shippingGrouping.get("amtCndUseAt"); // 금액조건
|
||||
String cntCndUseAt = (String) shippingGrouping.get("cntCndUseAt"); // 수량조건
|
||||
// String amtCndUseAt = (String) shippingGrouping.get("amtCndUseAt"); // 금액조건
|
||||
// String cntCndUseAt = (String) shippingGrouping.get("cntCndUseAt"); // 수량조건
|
||||
|
||||
for (DataMap goodsMap : goodsByDlvyGroupList) {
|
||||
|
||||
BigDecimal qy = (BigDecimal) goodsMap.get("qy"); // 수량
|
||||
// BigDecimal qy = (BigDecimal) goodsMap.get("qy"); // 수량
|
||||
|
||||
// 금액 조건
|
||||
if ("Y".equals(amtCndUseAt)) {
|
||||
BigDecimal amtCndAditAmt = (BigDecimal) shippingGrouping.get("amtCndAditAmt"); // 금액조건 추가금액
|
||||
// BigDecimal amtCndAditAmt = (BigDecimal) shippingGrouping.get("amtCndAditAmt"); // 금액조건 추가금액
|
||||
BigDecimal slepric = (BigDecimal) goodsMap.get("subSlepric"); // 판매가 * 수량
|
||||
|
||||
if (slepric.compareTo(amtCndAditAmt) > 0) {
|
||||
dlvyAmt = new BigDecimal(0);
|
||||
} else {
|
||||
//배송비 합(같은상품 수량당 배송비 책정)
|
||||
dlvyAmt = dlvyAmt.multiply(qy);
|
||||
}
|
||||
// else {
|
||||
// //배송비 합(같은상품 수량당 배송비 책정)
|
||||
// dlvyAmt = dlvyAmt.multiply(qy);
|
||||
// }
|
||||
}
|
||||
|
||||
// 수량 조건
|
||||
if ("Y".equals(cntCndUseAt)) {
|
||||
BigDecimal cntCndAditAmt = (BigDecimal) shippingGrouping.get("cntCndAditAmt"); // 금액조건 추가금액
|
||||
// BigDecimal cntCndAditAmt = (BigDecimal) shippingGrouping.get("cntCndAditAmt"); // 금액조건 추가금액
|
||||
BigDecimal qy = (BigDecimal) goodsMap.get("qy"); // 수량
|
||||
|
||||
if (qy.compareTo(cntCndAditAmt) > 0) {
|
||||
dlvyAmt = new BigDecimal(0);
|
||||
} else {
|
||||
//배송비 합(같은상품 수량당 배송비 책정)
|
||||
dlvyAmt = dlvyAmt.multiply(qy);
|
||||
}
|
||||
// else {
|
||||
// //배송비 합(같은상품 수량당 배송비 책정)
|
||||
// dlvyAmt = dlvyAmt.multiply(qy);
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2268,29 +2292,66 @@ public class BOPurchsService {
|
||||
|
||||
} else if ("03".equals(dlvyGroupDvCd)) { // 유료배송
|
||||
|
||||
BigDecimal goodsQy = new BigDecimal(0);
|
||||
// 유료배송비 합(같은상품 수량당 배송비 책정)
|
||||
for (DataMap goodsMap : goodsByDlvyGroupList) {
|
||||
goodsQy = (BigDecimal) goodsMap.get("qy");
|
||||
dlvyAmt = dlvyAmt.multiply(goodsQy);
|
||||
if("KR".equals(dlvylcAreaCd) || "JP".equals(dlvylcAreaCd)) {
|
||||
|
||||
paidDlvyAmt = paidDlvyAmt.add(dlvyAmt);
|
||||
}
|
||||
// 유료배송비 합(같은상품 묶음 처리)
|
||||
//paidDlvyAmt = paidDlvyAmt.add(dlvyAmt);
|
||||
BigDecimal goodsQy = new BigDecimal(0);
|
||||
|
||||
if (!StringUtils.isEmpty(dlvyAreaAditAt) && "Y".equals(dlvyAreaAditAt)) {
|
||||
if (!StringUtils.isEmpty(defaultAdressAt) && "Y".equals(defaultAdressAt)) {
|
||||
addPaidDlvyAmt = addPaidDlvyAmt.add(areaAditDlvyAmt); // 유료 배송 도서산간 추가 배송비
|
||||
}
|
||||
for (DataMap goodsMap : goodsByDlvyGroupList) {
|
||||
|
||||
BigDecimal qy = (BigDecimal) goodsMap.get("qy"); // 수량
|
||||
|
||||
// 수량 조건
|
||||
if ("Y".equals(cntCndUseAt)) {
|
||||
|
||||
qy = (BigDecimal) goodsMap.get("qy"); // 수량
|
||||
|
||||
if (qy.compareTo(cntCndAditAmt) > 0) {
|
||||
goodsQy = qy.divide(cntCndAditAmt, 0, RoundingMode.CEILING);
|
||||
//배송비 합(같은상품 수량당 배송비 책정)
|
||||
BigDecimal multidlvyAmt = dlvyAmt.multiply(goodsQy);
|
||||
paidDlvyAmt = paidDlvyAmt.add(multidlvyAmt);
|
||||
|
||||
// 추가배송비 계산 (MUL)
|
||||
if (!StringUtils.isEmpty(dlvyAreaAditAt) && "Y".equals(dlvyAreaAditAt)) {
|
||||
if (!StringUtils.isEmpty(defaultAdressAt) && "Y".equals(defaultAdressAt)) {
|
||||
addPaidDlvyAmt = addPaidDlvyAmt.add(areaAditDlvyAmt.multiply(goodsQy)); // 유료 배송 도서산간 추가 배송비
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
// 수량당 배송비가 1인경우
|
||||
paidDlvyAmt = paidDlvyAmt.add(dlvyAmt);
|
||||
// 추가배송비 계산
|
||||
if (!StringUtils.isEmpty(dlvyAreaAditAt) && "Y".equals(dlvyAreaAditAt)) {
|
||||
if (!StringUtils.isEmpty(defaultAdressAt) && "Y".equals(defaultAdressAt)) {
|
||||
addPaidDlvyAmt = addPaidDlvyAmt.add(areaAditDlvyAmt); // 유료 배송 도서산간 추가 배송비
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//수량 조건 없는 경우
|
||||
paidDlvyAmt = paidDlvyAmt.add(dlvyAmt); // 유료배송비 합
|
||||
// 추가배송비 계산
|
||||
if (!StringUtils.isEmpty(dlvyAreaAditAt) && "Y".equals(dlvyAreaAditAt)) {
|
||||
if (!StringUtils.isEmpty(defaultAdressAt) && "Y".equals(defaultAdressAt)) {
|
||||
addPaidDlvyAmt = addPaidDlvyAmt.add(areaAditDlvyAmt); // 유료 배송 도서산간 추가 배송비
|
||||
}
|
||||
}
|
||||
}
|
||||
} //for
|
||||
} else {
|
||||
dlvyAmt = new BigDecimal(0);
|
||||
dftDlvyAmt = new BigDecimal(0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
BigDecimal finalDlvyAmt = dlvyAmt;
|
||||
BigDecimal amtCndAditAmt = (BigDecimal) shippingGrouping.get("amtCndAditAmt"); // 금액조건 추가금액
|
||||
BigDecimal finalDftDlvyAmt = dftDlvyAmt;
|
||||
// BigDecimal amtCndAditAmt = (BigDecimal) shippingGrouping.get("amtCndAditAmt"); // 금액조건 추가금액
|
||||
DataMap dlvyGroupMap = new DataMap(){{
|
||||
put("dlvyGroupInnb", dlvyGroupInnb);
|
||||
put("dftDlvyAmt", dftDlvyAmt);
|
||||
put("dftDlvyAmt", finalDftDlvyAmt);
|
||||
put("dlvyAmt", finalDlvyAmt);
|
||||
}};
|
||||
|
||||
|
||||
@@ -89,4 +89,11 @@ public class BOPurchsrVO extends AbstractVO {
|
||||
|
||||
/** 기본배송지 여부 */
|
||||
private String dftDlvylcAt;
|
||||
|
||||
/** 도도부현 코드(일본) */
|
||||
private String prefcd;
|
||||
|
||||
/**배송지역코드*/
|
||||
private String dlvylcAreaCd;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.wb.domainserver.domain.gcone.goods.subsvc.mapper;
|
||||
|
||||
import com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO;
|
||||
import com.wb.domainserver.util.dataaccess.DataMap;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
@Repository
|
||||
public interface BOSubsvcMapper {
|
||||
|
||||
/** 구독서비스 목록 조회*/
|
||||
List<DataMap> selectBOSubsvcList(BOSubsvcVO vo);
|
||||
/** 구독서비스 상세 조회 (관리자에서 사용함)*/
|
||||
DataMap selectBOSubsvcDetail(BOSubsvcVO vo);
|
||||
|
||||
/** 관리자 구독서비스 목록 조회*/
|
||||
List<DataMap> selectBOMngrSubsvcList(BOSubsvcVO vo);
|
||||
/** 관리자 구독서비스 조회조건 구독서비스*/
|
||||
List<DataMap> selectBOMngrSrchSubsvcList(BOSubsvcVO vo);
|
||||
/** 관리자 구독서비스 조회조건 구독서비스별 기수*/
|
||||
List<DataMap> selectBOMngrSrchSubsvcGnrList(BOSubsvcVO vo);
|
||||
/** 관리자 구독서비스 선택 삭제*/
|
||||
int deleteBOMngrSubsvc(BOSubsvcVO vo);
|
||||
/** 관리자 구독서비스 수정*/
|
||||
int updateBOMngrSubsvc(BOSubsvcVO vo);
|
||||
/** 관리자 구둑서비스 등록 */
|
||||
void insertBOMngrSubsvc(BOSubsvcVO vo);
|
||||
/** 관리자 구독서비스 명 중복체크*/
|
||||
int selectBOMngrSubsvcNmDupCheck(BOSubsvcVO vo);
|
||||
}
|
||||
@@ -0,0 +1,140 @@
|
||||
package com.wb.domainserver.domain.gcone.goods.subsvc.service;
|
||||
|
||||
import com.wb.domainserver.domain.gcone.goods.goodsinfo.vo.BOGoodsInfoVO;
|
||||
import com.wb.domainserver.domain.gcone.goods.subsvc.mapper.BOSubsvcMapper;
|
||||
import com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO;
|
||||
import com.wb.domainserver.util.dataaccess.DataMap;
|
||||
import io.micrometer.common.util.StringUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class BOSubsvcService {
|
||||
|
||||
@Autowired
|
||||
private BOSubsvcMapper mapper;
|
||||
|
||||
/**
|
||||
* 구독서비스 목록 조회
|
||||
* @param vo
|
||||
* @return
|
||||
*/
|
||||
public List<DataMap> selectBOSubsvcList(BOSubsvcVO vo) {
|
||||
List<DataMap> dataList = new ArrayList<>();
|
||||
|
||||
dataList = mapper.selectBOSubsvcList(vo);
|
||||
|
||||
return dataList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 구독서비스 상세 조회
|
||||
* @param vo
|
||||
* @return
|
||||
*/
|
||||
public DataMap selectBOSubsvcDetail(BOSubsvcVO vo) {
|
||||
DataMap dataMap = new DataMap();
|
||||
|
||||
dataMap = mapper.selectBOSubsvcDetail(vo);
|
||||
|
||||
return dataMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 관리자 구독서비스 목록 조회
|
||||
* */
|
||||
public List<DataMap> selectBOMngrSubsvcList(BOSubsvcVO vo) {
|
||||
List<DataMap> dataList = new ArrayList<>();
|
||||
|
||||
dataList = mapper.selectBOMngrSubsvcList(vo);
|
||||
if(dataList == null || dataList.isEmpty()){
|
||||
vo.getPaginationInfo().setTotalRecordCount(0);
|
||||
}else{
|
||||
vo.getPaginationInfo().setTotalRecordCount(((Long)dataList.get(0).get("totCnt")).intValue());
|
||||
}
|
||||
|
||||
return dataList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 관리자 구독서비스 조회조건 구독서비스
|
||||
* */
|
||||
public List<DataMap> selectBOMngrSrchSubsvcList(BOSubsvcVO vo) {
|
||||
List<DataMap> dataList = new ArrayList<>();
|
||||
|
||||
dataList = mapper.selectBOMngrSrchSubsvcList(vo);
|
||||
|
||||
return dataList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 관리자 구독서비스 조회조건 구독서비스별 기수
|
||||
* */
|
||||
public List<DataMap> selectBOMngrSrchSubsvcGnrList(BOSubsvcVO vo) {
|
||||
List<DataMap> dataList = new ArrayList<>();
|
||||
|
||||
dataList = mapper.selectBOMngrSrchSubsvcGnrList(vo);
|
||||
|
||||
return dataList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 관리자 구독서비스 선택 삭제(여러건 삭제)
|
||||
* */
|
||||
public String deleteBOMngrSubsvc(BOSubsvcVO vo) {
|
||||
String message = "fail";
|
||||
int result = mapper.deleteBOMngrSubsvc(vo);
|
||||
if (result > 0) {
|
||||
message = "success";
|
||||
}
|
||||
return message;
|
||||
}
|
||||
|
||||
/**
|
||||
* 관리자 구독서비스명 중복체크
|
||||
* */
|
||||
public String selectBOMngrSubsvcNmDupCheck(BOSubsvcVO vo) {
|
||||
String message = "success";
|
||||
int result = mapper.selectBOMngrSubsvcNmDupCheck(vo);
|
||||
if (result > 0) {
|
||||
message = "fail";
|
||||
}
|
||||
return message;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 관리자 구독서비스 수정
|
||||
* */
|
||||
public String updateBOMngrSubsvc(BOSubsvcVO vo) {
|
||||
String message = "fail";
|
||||
int result = mapper.updateBOMngrSubsvc(vo);
|
||||
if (result > 0) {
|
||||
message = "success";
|
||||
}
|
||||
return message;
|
||||
}
|
||||
|
||||
/**
|
||||
* 관리자 구독서비스 등록
|
||||
* */
|
||||
public String insertBOMngrSubsvc(BOSubsvcVO vo) {
|
||||
String message = "success";
|
||||
try{
|
||||
mapper.insertBOMngrSubsvc(vo);
|
||||
if(StringUtils.isEmpty(vo.getSubsvcInnb())){
|
||||
message = "fail";
|
||||
}
|
||||
}catch(Exception e){
|
||||
log.error(e.getMessage());
|
||||
message = "fail";
|
||||
}
|
||||
return message;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
package com.wb.domainserver.domain.gcone.goods.subsvc.vo;
|
||||
|
||||
import com.wb.domainserver.domain.comm.vo.AbstractVO;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class BOSubsvcVO extends AbstractVO {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 구독서비스고유번호 */
|
||||
private String subsvcInnb;
|
||||
/** 쇼핑몰코드 */
|
||||
private String sopmalCd;
|
||||
/** 구독서비스명 */
|
||||
private String subsvcNm;
|
||||
/** 구독기간 */
|
||||
private String subPd;
|
||||
/** 구독서비스기수 */
|
||||
private String subsvcGnr;
|
||||
/** 구독서비스명 다음기수 */
|
||||
private String subsvcNextGnr;
|
||||
/** 구독서비스기수명 */
|
||||
private String subsvcGnrNm;
|
||||
/** 배송횟수 */
|
||||
private String dlvyCnt;
|
||||
/** 배송주기 */
|
||||
private String dlvyCycle;
|
||||
/** 구독료 */
|
||||
private String subsvcCt;
|
||||
/** 1회 배송비 */
|
||||
private String tmeDlvyAmt;
|
||||
/** 소비자가 */
|
||||
private String cnsmrpric;
|
||||
/** 판매가 */
|
||||
private String slepric;
|
||||
/** 재고수량 */
|
||||
private String invntryQy;
|
||||
/** 판매재고수량 */
|
||||
private String usefulInvntryQy;
|
||||
/** 재고정책 */
|
||||
private String invntryPolicyCd;
|
||||
/** 가용재고제한수량 */
|
||||
private String avlinvLmttQy;
|
||||
/** 구독서비스상태 */
|
||||
private String subsvcSttusCd;
|
||||
/** 노출구분 */
|
||||
private String expsrDvCd;
|
||||
/** 노출시작일시 */
|
||||
private String expsrBgnDt;
|
||||
/** 노출종료일시 */
|
||||
private String expsrEndDt;
|
||||
/** 노출설정앞문구 */
|
||||
private String expsrSetupFwords;
|
||||
/** 구매수량제한구분코드 */
|
||||
private String purchsQyLmttDvCd;
|
||||
/** 구매수량 유형 */
|
||||
private String purchsQyTyCd;
|
||||
/** 최소구매수량 */
|
||||
private String mummPurchsQy;
|
||||
/** 최대구매수량 */
|
||||
private String mxmmPurchsQy;
|
||||
/** 구독서비스설명 */
|
||||
private String subsvcDc;
|
||||
/** 모바일구독서비스설명 */
|
||||
private String mblSubsvcDc;
|
||||
/** 모바일구독서비스설명 PC 동일여부 */
|
||||
private String mblSubsvcDcPcSameAt;
|
||||
/** 섬네일이미지경로 */
|
||||
private String img;
|
||||
/** 청약철회가능여부 */
|
||||
private String subscrptWthdrawPosblAt;
|
||||
/** 기본상품옵션고유번호 */
|
||||
private String dftGoodsOptnInnb;
|
||||
/** 최종처리차수 */
|
||||
private String lastProcsOdr;
|
||||
/** 삭제섬네일이미지경로 */
|
||||
private String delImg;
|
||||
|
||||
|
||||
/** 검색조건 */
|
||||
/** 구독서비스명 selectbox*/
|
||||
private String srchSelSubsvcNm;
|
||||
/** 구독서비스명 */
|
||||
private String srchSubsvcNm;
|
||||
/** 구독서비스기수 select */
|
||||
private String srchSelSubsvcGnr;
|
||||
/** 구독서비스기수명 */
|
||||
private String srchSubsvcGnrNm;
|
||||
/** 구독서비스상태 */
|
||||
private List<String> srchArrSubsvcSttusCd;
|
||||
/** 노출구분 */
|
||||
private String srchExpsrDvCd;
|
||||
/** 정렬구분 */
|
||||
private String sortDv;
|
||||
/** 배열 구독서비스고유번호 */
|
||||
private List<String> arrSubsvcInnb;
|
||||
}
|
||||
@@ -206,7 +206,11 @@ public class BOAtmcRcpmnyCnfirmVO extends AbstractVO {
|
||||
/** 입금여부3 */
|
||||
private String srchOrdrSttusCd3;
|
||||
|
||||
private String srchDatePick;
|
||||
|
||||
/** 회원 구분 코드 */
|
||||
private String mbrDvCd;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -767,6 +767,8 @@ public interface BOOrdrMapper {
|
||||
*/
|
||||
public String selectBODefaultAdressAtInqire(DataMap vo);
|
||||
|
||||
public String selectBODefaultAdressAtInqire2(DataMap vo);
|
||||
|
||||
|
||||
/**
|
||||
* 주문 상품 옵션별 정보와 배송그룹 정보
|
||||
@@ -972,6 +974,14 @@ public interface BOOrdrMapper {
|
||||
* @return
|
||||
*/
|
||||
public String commonOrderSttusCdCheckCurrent(DataMap vo);
|
||||
|
||||
|
||||
/**
|
||||
* 사용자 > 마이페이지 > 구독서비스 주문/배송 목록 조회
|
||||
* @param ordrDlvyVO
|
||||
* @return List<DataMap>
|
||||
*/
|
||||
public List<DataMap> selectMbrSubsvcOrdrList(BOOrdrDlvyVO ordrDlvyVO);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1810,6 +1810,25 @@ public class BOOrdrService{
|
||||
return resultList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 사용자 > 마이페이지 > MY쇼핑 > 구독서비스 주문/배송조회 > 구독서비스 주문/배송 목록 조회
|
||||
* @param ordrDlvyVO
|
||||
* @return List<DataMap>
|
||||
*/
|
||||
public List<DataMap> selectMbrSubsvcOrdrListInqireAjax(BOOrdrDlvyVO ordrDlvyVO) {
|
||||
List<DataMap> resultList = null;
|
||||
|
||||
resultList = mapper.selectMbrSubsvcOrdrList(ordrDlvyVO);
|
||||
|
||||
if(resultList == null || resultList.size() == 0){
|
||||
ordrDlvyVO.getPaginationInfo().setTotalRecordCount(0);
|
||||
}else{
|
||||
ordrDlvyVO.getPaginationInfo().setTotalRecordCount(Integer.parseInt(String.valueOf(resultList.get(0).get("totCnt"))));
|
||||
}
|
||||
|
||||
return resultList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 사용자 > 마이페이지 > MY쇼핑 > 주문/배송조회 > 주문 취소 상태 수정
|
||||
* @param ordrDlvyVO
|
||||
@@ -2805,7 +2824,7 @@ public class BOOrdrService{
|
||||
cashVO.setSopmalCd(ordrVO.getSopmalCd());
|
||||
cashVO.setMbrDvCd(ordrVO.getMbrDvCd());
|
||||
cashVO.setMbrInnb(String.valueOf(ordrVO.getMbrInnb()));
|
||||
|
||||
//구매자조회
|
||||
DataMap purchsrMap = purchsService.selectPurchsr(purchsrVO);
|
||||
|
||||
if (!CollectionUtils.isEmpty(purchsrMap)) {
|
||||
@@ -2984,6 +3003,8 @@ public class BOOrdrService{
|
||||
public Map<String, Object> selectSetleExpectAmt(DataMap param) throws Exception {
|
||||
Map<String, Object> content = new HashMap<>();
|
||||
|
||||
log.debug("selectSetleExpectAmt-param : {}", param);
|
||||
|
||||
LinkedHashMap setleExpectAmtMap = new LinkedHashMap() {{
|
||||
put("goodsAmt", 0);
|
||||
put("dlvyAmt", 0);
|
||||
@@ -3357,10 +3378,16 @@ public class BOOrdrService{
|
||||
|
||||
// ############################################## 배송지별 배송비 계산 START ##############################################
|
||||
|
||||
String ordrAdressZip = StringUtil.isNullToString(param.get("dlvylcZip"));
|
||||
LinkedHashMap<String, Object> shippingMap = (LinkedHashMap) param.get("shipping");
|
||||
|
||||
// String ordrAdressZip = StringUtil.isNullToString(param.get("dlvylcZip"));
|
||||
String ordrAdressZip = StringUtil.isNullToString(shippingMap.get("dlvylcZip"));
|
||||
String dlvylcAreaCd = (String) shippingMap.get("dlvylcAreaCd");
|
||||
String prefcd = (String) shippingMap.get("prefcd");
|
||||
DataMap defaultAdressVO = new DataMap() {{ //
|
||||
put("sopmalCd", sopmalCd); // 쇼핑몰 코드
|
||||
put("zip", ordrAdressZip); // 우편번호
|
||||
put("prefcd", prefcd); // 도도부현코드
|
||||
}};
|
||||
|
||||
String defaultAdressAt = "N"; // 내가 제2권역 주소인지 여부
|
||||
@@ -3392,15 +3419,21 @@ public class BOOrdrService{
|
||||
dlvyCouponDscntAmt = dlvyCouponDscntAmt.add(new BigDecimal(applyDlvylcCouponDscntAmt));
|
||||
}
|
||||
|
||||
|
||||
defaultAdressVO.put("zip", StringUtil.isNullToString(dlvylcMapMulti.get("dlvylcZip")));
|
||||
log.debug("defaultAdressVO : {}", defaultAdressVO);
|
||||
defaultAdressAt = mapper.selectBODefaultAdressAtInqire(defaultAdressVO);
|
||||
if("KR".equals(dlvylcAreaCd)){
|
||||
defaultAdressVO.put("zip", StringUtil.isNullToString(dlvylcMapMulti.get("dlvylcZip")));
|
||||
log.debug("defaultAdressVO-KR : {}", defaultAdressVO);
|
||||
defaultAdressAt = mapper.selectBODefaultAdressAtInqire(defaultAdressVO);
|
||||
}
|
||||
if("JP".equals(dlvylcAreaCd)){
|
||||
defaultAdressVO.put("prefcd", StringUtil.isNullToString(dlvylcMapMulti.get("prefcd")));
|
||||
log.debug("defaultAdressVO-JP : {}", defaultAdressVO);
|
||||
defaultAdressAt = mapper.selectBODefaultAdressAtInqire2(defaultAdressVO);
|
||||
}
|
||||
|
||||
List<LinkedHashMap> goodsListMulti = (List<LinkedHashMap>) dlvylcMapMulti.get("goodsList");
|
||||
log.debug("goodsListMulti : {}", goodsListMulti);
|
||||
if (!CollectionUtils.isEmpty(goodsListMulti)) {
|
||||
dlvyAmtMapMulti = purchsService.getDlvyAmt(goodsListMulti, sopmalCd, defaultAdressAt);
|
||||
dlvyAmtMapMulti = purchsService.getDlvyAmt(goodsListMulti, sopmalCd, defaultAdressAt, dlvylcAreaCd);
|
||||
|
||||
if (!CollectionUtils.isEmpty(dlvyAmtMapMulti)) {
|
||||
if (dlvylcMapMulti.get("mngrFreeDlvyUseAt") != null && "Y".equals(dlvylcMapMulti.get("mngrFreeDlvyUseAt").toString())) {
|
||||
@@ -3424,8 +3457,68 @@ public class BOOrdrService{
|
||||
}
|
||||
|
||||
} else { // 일반 주문
|
||||
// DataMap dlvyAmtMapMulti = null;
|
||||
//
|
||||
// LinkedHashMap<String, Object> multiOrdrDlvylcMap = (LinkedHashMap) param.get("multiOrdrDlvylc");
|
||||
//
|
||||
// log.debug("multiOrdrDlvylcMap : {}", multiOrdrDlvylcMap);
|
||||
// if (!CollectionUtils.isEmpty(multiOrdrDlvylcMap)) {
|
||||
//
|
||||
// List<LinkedHashMap<String, Object>> dlvylcListMulti = (List<LinkedHashMap<String, Object>>) multiOrdrDlvylcMap.get("dlvylc");
|
||||
//
|
||||
// if (!CollectionUtils.isEmpty(dlvylcListMulti)) {
|
||||
//
|
||||
// int dlvyAmtIndex = 0; // 배송지 rownum 체크
|
||||
// for (LinkedHashMap<String, Object> dlvylcMapMulti : dlvylcListMulti) {
|
||||
// int dlvyAmtBydlvylc = 0;
|
||||
//
|
||||
// LinkedHashMap dlvylcDscntDtlsMulti = (LinkedHashMap) dlvylcMapMulti.get("dlvylcDscntDtls");
|
||||
//
|
||||
// if (!CollectionUtils.isEmpty(dlvylcDscntDtlsMulti)) {
|
||||
// int applyDlvylcCouponDscntAmt = (int) dlvylcDscntDtlsMulti.get("dscntAmt");
|
||||
//
|
||||
// dlvyCouponDscntAmt = dlvyCouponDscntAmt.add(new BigDecimal(applyDlvylcCouponDscntAmt));
|
||||
// }
|
||||
//
|
||||
//
|
||||
// defaultAdressVO.put("zip", StringUtil.isNullToString(dlvylcMapMulti.get("dlvylcZip")));
|
||||
// log.debug("defaultAdressVO : {}", defaultAdressVO);
|
||||
// defaultAdressAt = mapper.selectBODefaultAdressAtInqire(defaultAdressVO);
|
||||
//
|
||||
// List<LinkedHashMap> goodsListMulti = (List<LinkedHashMap>) dlvylcMapMulti.get("goodsList");
|
||||
// log.debug("goodsListMulti : {}", goodsListMulti);
|
||||
// if (!CollectionUtils.isEmpty(goodsListMulti)) {
|
||||
// dlvyAmtMapMulti = purchsService.getDlvyAmt(goodsListMulti, sopmalCd, defaultAdressAt, dlvylcAreaCd);
|
||||
//
|
||||
// if (!CollectionUtils.isEmpty(dlvyAmtMapMulti)) {
|
||||
// if (dlvylcMapMulti.get("mngrFreeDlvyUseAt") != null && "Y".equals(dlvylcMapMulti.get("mngrFreeDlvyUseAt").toString())) {
|
||||
// log.debug("관리자 무료배송 체크 'Y'");
|
||||
// dlvyAmt = dlvyAmt.add(new BigDecimal(0));
|
||||
// } else {
|
||||
// dlvyAmt = dlvyAmt.add((BigDecimal) dlvyAmtMapMulti.get("dlvyAmt"));
|
||||
// }
|
||||
// dlvyAmtMulti.put("shippingDlvyAmt" + dlvyAmtIndex, new BigDecimal(String.valueOf(dlvyAmtMapMulti.get("dlvyAmt"))));
|
||||
//
|
||||
// dftDlvyAmt = dftDlvyAmt.add((BigDecimal) dlvyAmtMapMulti.get("dftDlvyAmt"));
|
||||
// dlvyAmtMulti.put("shippingDftDlvyAmt" + dlvyAmtIndex, new BigDecimal(String.valueOf(dlvyAmtMapMulti.get("dftDlvyAmt"))));
|
||||
//
|
||||
// dlvyAmtIndex += 1; // 배송지 rownum ++
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// }
|
||||
//
|
||||
// }
|
||||
|
||||
defaultAdressAt = mapper.selectBODefaultAdressAtInqire(defaultAdressVO);
|
||||
if("KR".equals(dlvylcAreaCd)){
|
||||
log.debug("defaultAdressVO-KR : {}", defaultAdressVO);
|
||||
defaultAdressAt = mapper.selectBODefaultAdressAtInqire(defaultAdressVO);
|
||||
}
|
||||
if("JP".equals(dlvylcAreaCd)){
|
||||
log.debug("defaultAdressVO-JP : {}", defaultAdressVO);
|
||||
defaultAdressAt = mapper.selectBODefaultAdressAtInqire2(defaultAdressVO);
|
||||
}
|
||||
|
||||
LinkedHashMap<String, Object> dlvylcMap = (LinkedHashMap) param.get("dlvylc");
|
||||
|
||||
@@ -3453,18 +3546,18 @@ public class BOOrdrService{
|
||||
if (dlvylcMap.get("dlvyAmt") != null) {
|
||||
log.debug("배송비 객체 : {}", dlvylcMap);
|
||||
if (dlvylcMap.get("mngrFreeDlvyUseAt") != null && "N".equals(dlvylcMap.get("mngrFreeDlvyUseAt").toString())) {
|
||||
dlvyAmtMap = purchsService.getDlvyAmt(goodsList, sopmalCd, defaultAdressAt);
|
||||
dlvyAmtMap = purchsService.getDlvyAmt(goodsList, sopmalCd, defaultAdressAt, dlvylcAreaCd);
|
||||
} else if (dlvylcMap.get("mngrFreeDlvyUseAt") != null && "Y".equals(dlvylcMap.get("mngrFreeDlvyUseAt").toString())) {
|
||||
log.debug("관리자 무료배송 체크 'Y'");
|
||||
} else {
|
||||
dlvyAmtMap = purchsService.getDlvyAmt(goodsList, sopmalCd, defaultAdressAt);
|
||||
dlvyAmtMap = purchsService.getDlvyAmt(goodsList, sopmalCd, defaultAdressAt, dlvylcAreaCd);
|
||||
}
|
||||
|
||||
if (!CollectionUtils.isEmpty(dlvyAmtMap)) {
|
||||
dlvyAmtBydlvylc = ((BigDecimal) dlvyAmtMap.get("dlvyAmt")).intValue();
|
||||
}
|
||||
} else {
|
||||
dlvyAmtMap = purchsService.getDlvyAmt(goodsList, sopmalCd, defaultAdressAt);
|
||||
dlvyAmtMap = purchsService.getDlvyAmt(goodsList, sopmalCd, defaultAdressAt, dlvylcAreaCd);
|
||||
|
||||
if (!CollectionUtils.isEmpty(dlvyAmtMap)) {
|
||||
dlvyAmtBydlvylc = ((BigDecimal) dlvyAmtMap.get("dlvyAmt")).intValue();
|
||||
@@ -3473,7 +3566,7 @@ public class BOOrdrService{
|
||||
|
||||
dlvyAmt = new BigDecimal(dlvyAmtBydlvylc);
|
||||
} else {
|
||||
dlvyAmtMap = purchsService.getDlvyAmt(goodsList, sopmalCd, defaultAdressAt);
|
||||
dlvyAmtMap = purchsService.getDlvyAmt(goodsList, sopmalCd, defaultAdressAt, dlvylcAreaCd);
|
||||
|
||||
if (!CollectionUtils.isEmpty(dlvyAmtMap)) {
|
||||
dlvyAmt = (BigDecimal) dlvyAmtMap.get("dlvyAmt");
|
||||
|
||||
@@ -26,6 +26,8 @@ public class BOCrmDlvylcVO extends AbstractVO{
|
||||
@NotBlank(message = "배송지 설명")
|
||||
@Length(min=1, max=67)
|
||||
private String dlvylcDcCn;
|
||||
/**배송지역코드*/
|
||||
private String dlvylcAreaCd;
|
||||
/** 받는사람명 */
|
||||
@NotBlank(message = "받으시는 분")
|
||||
@Length(min=1, max=13)
|
||||
@@ -38,7 +40,7 @@ public class BOCrmDlvylcVO extends AbstractVO{
|
||||
private String telnb;
|
||||
/** 우편번호 */
|
||||
@NotBlank(message = "우편번호")
|
||||
@Length(min=1, max=5)
|
||||
@Length(min=1, max=7)
|
||||
private String zip;
|
||||
/** 도로명,지번 구분*/
|
||||
private String adresDv;
|
||||
@@ -50,6 +52,10 @@ public class BOCrmDlvylcVO extends AbstractVO{
|
||||
private String rnmAdres = "";
|
||||
/** 상세주소 */
|
||||
private String dtlAdres;
|
||||
/** 개인통관부호(개인통관번호) */
|
||||
private String cstmclerCd;
|
||||
/** 도도부현 코드(일본) */
|
||||
private String prefcd;
|
||||
/** 기본배송지여부 */
|
||||
private String dftDlvylcAt = "N";
|
||||
/** 최근배송지여부 */
|
||||
|
||||
@@ -16,7 +16,7 @@ public class BODwldItmVO extends AbstractVO {
|
||||
|
||||
private String sopmalCd; // 쇼핑몰 코드
|
||||
|
||||
private long excelDwldFormSnb; // 엑셀다운로드양식순번
|
||||
private String excelDwldFormSnb; // 엑셀다운로드양식순번
|
||||
|
||||
private String excelFormDvCd; // 코드그룹 : formDvCd 코드 : 주문, 회원
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ public class BOOrdrSrchVO extends AbstractVO{
|
||||
|
||||
private String srchMemorSetleAt; // 수기결제여부
|
||||
|
||||
private long srchExcelDwldFormSnb; // 엑셀다운로드양식순번
|
||||
private String srchExcelDwldFormSnb; // 엑셀다운로드양식순번
|
||||
|
||||
private String srchExcelDwldDvCd; // 엑셀다운로드 대상 구분 코드
|
||||
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
package com.wb.domainserver.domain.gcone.ordr.subsvc.mapper;
|
||||
|
||||
import com.wb.domainserver.domain.gcone.ordr.subsvc.vo.BOSubsvcOrderVO;
|
||||
import com.wb.domainserver.util.dataaccess.DataMap;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
*
|
||||
* 구독서비스 주문 BO mapper
|
||||
* @author jazz
|
||||
* @since 2026-02-04
|
||||
* @version 1.0
|
||||
* @see
|
||||
*
|
||||
* <pre>
|
||||
* == (Modification Information) == 개정이력
|
||||
*
|
||||
* 수정일 수정자 수정내용
|
||||
* ------- -------- ---------------------------
|
||||
* 2026-02-04 jazz 최초 생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Mapper
|
||||
@Repository
|
||||
public interface BOSubsvcOrdrMapper {
|
||||
|
||||
/** 구독서비스 상품준비 관리 목록*/
|
||||
List<DataMap> selectBOSubsvcOrderList(BOSubsvcOrderVO vo);
|
||||
/** 구독서비스 상품준비 관리 목록 배송내역 팝업 배송내역목록*/
|
||||
List<DataMap> selectBOSubsvcOrderDlvyList(BOSubsvcOrderVO vo);
|
||||
/** 구독서비스 상품준비 관리 상품매칭 - 1. GC_ORDER update*/
|
||||
int updateBOSubsvcGoodsMappgOrdr(BOSubsvcOrderVO vo);
|
||||
/** 구독서비스 상품준비 관리 상품매칭 - 2. GC_ORDER_ITEM update*/
|
||||
int updateBOSubsvcGoodsMappgOrdrItem(BOSubsvcOrderVO vo);
|
||||
/** 구독서비스 상품준비 관리 상품매칭 - 3. GC_ORDER_ITEM_OPTION update*/
|
||||
int updateBOSubsvcGoodsMappgOrdrItemOptn(BOSubsvcOrderVO vo);
|
||||
/** 구독서비스 상품준비 관리 상품매칭 - 4. GC_ORDER_SHIPPING update*/
|
||||
int updateBOSubsvcGoodsMappgShipping(BOSubsvcOrderVO vo);
|
||||
/** 구독서비스 상품준비 관리 상품매칭 - 5. GC_SUBSVC update*/
|
||||
int updateBOSubsvcGoodsMappgSubsvc(BOSubsvcOrderVO vo);
|
||||
|
||||
/** 구독서비스 상품변경 관리 목록*/
|
||||
List<DataMap> selectBOSubsvcOrderMappedList(BOSubsvcOrderVO vo);
|
||||
|
||||
/** 구독서비스 구독자조회 목록*/
|
||||
List<DataMap> selectBOSubsvcOrderMbrList(BOSubsvcOrderVO vo);
|
||||
/** 구독서비스 구독자조회 - 구독자목록 팝업 - 구독서비스 정보*/
|
||||
DataMap selectBOSubsvcInfo(BOSubsvcOrderVO vo);
|
||||
/** 구독서비스 구독자조회 - 구독자목록 팝업 - 구독자목록 조회*/
|
||||
List<DataMap> selectBOSubsvcOrderMbrInfoList(BOSubsvcOrderVO vo);
|
||||
/** 구독서비스 구독자조회 - 배송상품 목록팝업 - 배송상품목록 조회*/
|
||||
List<DataMap> selectBOSubsvcOrderGoodsInfoList(BOSubsvcOrderVO vo);
|
||||
}
|
||||
@@ -0,0 +1,247 @@
|
||||
package com.wb.domainserver.domain.gcone.ordr.subsvc.service;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.nimbusds.jose.shaded.gson.Gson;
|
||||
import com.wb.domainserver.common.prop.PropertyService;
|
||||
import com.wb.domainserver.domain.admin.instcSle.mtng.mapper.BOMaMtngMapper;
|
||||
import com.wb.domainserver.domain.admin.store.sopmal.mapper.BOMaSopmalMapper;
|
||||
import com.wb.domainserver.domain.admin.sys.comncd.service.BOMaComncdService;
|
||||
import com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO;
|
||||
import com.wb.domainserver.domain.gcone.goods.goods.service.BOGoodsService;
|
||||
import com.wb.domainserver.domain.gcone.goods.purchs.mapper.BOPurchsMapper;
|
||||
import com.wb.domainserver.domain.gcone.goods.purchs.service.BOOrderNoService;
|
||||
import com.wb.domainserver.domain.gcone.goods.purchs.service.BOOrderService;
|
||||
import com.wb.domainserver.domain.gcone.goods.purchs.service.BOPurchsService;
|
||||
import com.wb.domainserver.domain.gcone.goods.purchs.vo.*;
|
||||
import com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO;
|
||||
import com.wb.domainserver.domain.gcone.mbr.mbr.mapper.BOMbrMapper;
|
||||
import com.wb.domainserver.domain.gcone.mbr.mbr.service.BOMbrService;
|
||||
import com.wb.domainserver.domain.gcone.mbr.mbr.vo.BOMbrAppnVO;
|
||||
import com.wb.domainserver.domain.gcone.mbr.mbr.vo.BOMbrVO;
|
||||
import com.wb.domainserver.domain.gcone.mbr.mlg.service.BOMlgService;
|
||||
import com.wb.domainserver.domain.gcone.mbr.mlg.vo.BOCashVO;
|
||||
import com.wb.domainserver.domain.gcone.mbr.mlg.vo.BOMlgVO;
|
||||
import com.wb.domainserver.domain.gcone.ntcn.mssage.service.BOMssageService;
|
||||
import com.wb.domainserver.domain.gcone.ordr.ordr.mapper.BOOrdrMapper;
|
||||
import com.wb.domainserver.domain.gcone.ordr.ordr.service.BOOrderCommonService;
|
||||
import com.wb.domainserver.domain.gcone.ordr.ordr.service.BOOrdrLogService;
|
||||
import com.wb.domainserver.domain.gcone.ordr.ordr.vo.*;
|
||||
import com.wb.domainserver.domain.gcone.ordr.pay.service.BOPayService;
|
||||
import com.wb.domainserver.domain.gcone.ordr.pay.vo.BOPayVO;
|
||||
import com.wb.domainserver.domain.gcone.ordr.rtngudrefnd.mapper.BORtngudrefndMapper;
|
||||
import com.wb.domainserver.domain.gcone.ordr.rtngudrefnd.service.BORtngudrefndService;
|
||||
import com.wb.domainserver.domain.gcone.ordr.rtngudrefnd.vo.BORtngudrefndVO;
|
||||
import com.wb.domainserver.domain.gcone.ordr.selngpruf.service.BOSelngprufService;
|
||||
import com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO;
|
||||
import com.wb.domainserver.domain.gcone.ordr.subsvc.mapper.BOSubsvcOrdrMapper;
|
||||
import com.wb.domainserver.domain.gcone.ordr.subsvc.vo.BOSubsvcOrderVO;
|
||||
import com.wb.domainserver.domain.gcone.promtn.coupon.service.BOCouponService;
|
||||
import com.wb.domainserver.domain.gcone.promtn.coupon.vo.BODwldCouponVO;
|
||||
import com.wb.domainserver.domain.gcone.setup.site.service.BOSiteService;
|
||||
import com.wb.domainserver.domain.gcone.setup.site.vo.BOGoodsgrpVO;
|
||||
import com.wb.domainserver.domain.gcone.setup.site.vo.BOSiteVO;
|
||||
import com.wb.domainserver.exception.WnbtException;
|
||||
import com.wb.domainserver.exception.WnbtRestException;
|
||||
import com.wb.domainserver.security.authentication.AnonymousUser;
|
||||
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
|
||||
import com.wb.domainserver.util.dataaccess.DataMap;
|
||||
import com.wb.domainserver.util.string.StringUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Propagation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.OffsetDateTime;
|
||||
import java.time.ZoneOffset;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.format.DateTimeParseException;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
*
|
||||
* 구독서비스주문 BO service
|
||||
* @author jazz
|
||||
* @since 2026-02-05
|
||||
* @version 1.0
|
||||
* @see
|
||||
*
|
||||
* <pre>
|
||||
* == (Modification Information) == 개정이력
|
||||
*
|
||||
* 수정일 수정자 수정내용
|
||||
* ------- -------- ---------------------------
|
||||
* 2026-02-05 jazz 최초 생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class BOSubsvcOrdrService {
|
||||
@Autowired
|
||||
private BOSubsvcOrdrMapper mapper;
|
||||
|
||||
/**
|
||||
* 구독서비스 상품준비 관리 목록
|
||||
* @param
|
||||
* @return List<DataMap>
|
||||
*/
|
||||
public List<DataMap> selectBOSubsvcOrderList(BOSubsvcOrderVO vo) {
|
||||
List<DataMap> dataList = new ArrayList<>();
|
||||
|
||||
try {
|
||||
dataList = mapper.selectBOSubsvcOrderList(vo);
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
}
|
||||
if(dataList == null || dataList.isEmpty()){
|
||||
vo.getPaginationInfo().setTotalRecordCount(0);
|
||||
}else{
|
||||
vo.getPaginationInfo().setTotalRecordCount(((Long)dataList.get(0).get("totCnt")).intValue());
|
||||
}
|
||||
|
||||
return dataList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 구독서비스 상품준비 관리 목록 배송내역 팝업 배송내역목록
|
||||
* @param
|
||||
* @return List<DataMap>
|
||||
*/
|
||||
public List<DataMap> selectBOSubsvcOrderDlvyList(BOSubsvcOrderVO vo) {
|
||||
List<DataMap> dataList = new ArrayList<>();
|
||||
dataList = mapper.selectBOSubsvcOrderDlvyList(vo);
|
||||
return dataList;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 선택대상 상품준비 일괄처리
|
||||
* 구독서비스 상품준비 일괄처리
|
||||
* 1. GC_ORDER 주문상태를 결제확인(25)만 상품준비중(35)로 변경(25가 아니면 UPDT_DT만 변경)
|
||||
* 2. GC_ORDER_ITEM의 상품고유번호(GOODS_INNB), 상품이지지경로(GOODS_IMG_COURS), 상품명(GOODS_NM)를 변경
|
||||
* 3. GC_ORDER_ITEM_OPTION의 상품옵셥 고유번호(GOODS_OPTN_INNB), 주문상태(GOODS_STTUS_CD)를 결제확인(25)=>상품준비중(35), 옵션명1(OPTN_NM_1) 부터 GC_GOODS_OPTION과 동일한 컬럼 매칭
|
||||
* 4. GC_ORDER_SHIPPING의 주문배송고유번호(ORDR_DLVY_INNB)가 같은 대상의 주문상태(GOODS_STTUS_CD)를 결제확인(25)=>상품준비중(35)
|
||||
* 5. GC_SUBSVC의 최종처리차수(LAST_PROCS_DGR)를 수정 (주문상품옵션에 주문별 처리차수중 가능 큰처리차수(35~75까지 COUNT해서 가장 큰수)를 등록)
|
||||
* */
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public String updateSubsvcOrdrReady(BOSubsvcOrderVO vo) {
|
||||
String message = "success";
|
||||
/*1. GC_ORDER*/
|
||||
int result = mapper.updateBOSubsvcGoodsMappgOrdr(vo);
|
||||
if (!(result > 0)) {
|
||||
log.error("GC_ORDER UPDATE 오류");
|
||||
throw new WnbtException("500","GC_ORDER UPDATE 오류");
|
||||
}
|
||||
result = mapper.updateBOSubsvcGoodsMappgOrdrItem(vo);
|
||||
if (!(result > 0)) {
|
||||
log.error("GC_ORDER_ITEM UPDATE 오류");
|
||||
throw new WnbtException("500","GC_ORDER_ITEM UPDATE 오류");
|
||||
}
|
||||
result = mapper.updateBOSubsvcGoodsMappgOrdrItemOptn(vo);
|
||||
if (!(result > 0)) {
|
||||
log.error("GC_ORDER_ITEM_OPTION UPDATE 오류");
|
||||
throw new WnbtException("500","GC_ORDER_ITEM_OPTION UPDATE 오류");
|
||||
}
|
||||
result = mapper.updateBOSubsvcGoodsMappgShipping(vo);
|
||||
if (!(result > 0)) {
|
||||
log.error("GC_ORDER_SHIPPING UPDATE 오류");
|
||||
throw new WnbtException("500","GC_ORDER_SHIPPING UPDATE 오류");
|
||||
}
|
||||
result = mapper.updateBOSubsvcGoodsMappgSubsvc(vo);
|
||||
if (!(result > 0)) {
|
||||
log.error("GC_SUBSVC 처리중 오류");
|
||||
throw new WnbtException("500","GC_SUBSVC 처리중 오류");
|
||||
}
|
||||
return message;
|
||||
}
|
||||
|
||||
/**
|
||||
* 구독서비스 상품변경 관리 목록
|
||||
* @param vo
|
||||
* @return List<DataMap>
|
||||
*/
|
||||
public List<DataMap> selectBOSubsvcOrderMappedList(BOSubsvcOrderVO vo) {
|
||||
List<DataMap> dataList = new ArrayList<>();
|
||||
|
||||
try {
|
||||
dataList = mapper.selectBOSubsvcOrderMappedList(vo);
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
}
|
||||
if(dataList == null || dataList.isEmpty()){
|
||||
vo.getPaginationInfo().setTotalRecordCount(0);
|
||||
}else{
|
||||
vo.getPaginationInfo().setTotalRecordCount(((Long)dataList.get(0).get("totCnt")).intValue());
|
||||
}
|
||||
|
||||
return dataList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 구독서비스 구독자조회 목록
|
||||
* @param vo
|
||||
* @return List<DataMap>
|
||||
*/
|
||||
public List<DataMap> selectBOSubsvcOrderMbrList(BOSubsvcOrderVO vo) {
|
||||
List<DataMap> dataList = new ArrayList<>();
|
||||
|
||||
try {
|
||||
dataList = mapper.selectBOSubsvcOrderMbrList(vo);
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
}
|
||||
if(dataList == null || dataList.isEmpty()){
|
||||
vo.getPaginationInfo().setTotalRecordCount(0);
|
||||
}else{
|
||||
vo.getPaginationInfo().setTotalRecordCount(((Long)dataList.get(0).get("totCnt")).intValue());
|
||||
}
|
||||
|
||||
return dataList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 구독서비스 구독자조회 - 구독자목록 팝업 - 구독서비스 정보
|
||||
* @param vo
|
||||
* @return DataMap
|
||||
*/
|
||||
public DataMap selectBOSubsvcInfo(BOSubsvcOrderVO vo) {
|
||||
DataMap data = new DataMap();
|
||||
data = mapper.selectBOSubsvcInfo(vo);
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 구독서비스 구독자조회 - 구독자목록 팝업 - 구독자목록 조회
|
||||
* @param vo
|
||||
* @return DataMap
|
||||
*/
|
||||
public List<DataMap> selectBOSubsvcOrderMbrInfoList(BOSubsvcOrderVO vo) {
|
||||
List<DataMap> dataList = new ArrayList<DataMap>();
|
||||
dataList = mapper.selectBOSubsvcOrderMbrInfoList(vo);
|
||||
return dataList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 구독서비스 구독자조회 - 배송상품 목록팝업 - 배송상품목록 조회
|
||||
* @param vo
|
||||
* @return DataMap
|
||||
*/
|
||||
public List<DataMap> selectBOSubsvcOrderGoodsInfoList(BOSubsvcOrderVO vo) {
|
||||
List<DataMap> dataList = new ArrayList<DataMap>();
|
||||
dataList = mapper.selectBOSubsvcOrderGoodsInfoList(vo);
|
||||
return dataList;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
package com.wb.domainserver.domain.gcone.ordr.subsvc.vo;
|
||||
|
||||
import com.wb.domainserver.domain.comm.vo.AbstractVO;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class BOSubsvcOrderVO extends AbstractVO {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 구독서비스고유번호 */
|
||||
private String subsvcInnb;
|
||||
/** 쇼핑몰코드 */
|
||||
private String sopmalCd;
|
||||
/** 구독서비스명 */
|
||||
private String subsvcNm;
|
||||
/** 구독기간 */
|
||||
private String subPd;
|
||||
/** 구독서비스기수 */
|
||||
private String subsvcGnr;
|
||||
/** 구독서비스명 다음기수 */
|
||||
private String subsvcNextGnr;
|
||||
/** 구독서비스기수명 */
|
||||
private String subsvcGnrNm;
|
||||
/** 주문고유번호 */
|
||||
private String ordrInnb;
|
||||
/** 주문상품고유번호 */
|
||||
private String ordrGoodsInnb;
|
||||
/** 주문상품옵션고유번호 */
|
||||
private String ordrGoodsOptnInnb;
|
||||
|
||||
|
||||
/** 출고상품고유번호*/
|
||||
private String goodsInnb;
|
||||
/** 출고상품옵션고유번호*/
|
||||
private String goodsOptnInnb;
|
||||
/** 출고상품옵션구분*/
|
||||
private String optnTy;
|
||||
|
||||
/** 상품준비대상*/
|
||||
private List<String> arrCheck;
|
||||
/** 상품준비대상 주문고유번호*/
|
||||
private List<String> arrOrdrInnb;
|
||||
/** 상품준비대상 주문상품고유번호*/
|
||||
private List<String> arrOrdrGoodsInnb;
|
||||
/** 상품준비대상 주문상품옵션고유번호*/
|
||||
private List<String> arrOrdrGoodsOptnInnb;
|
||||
/** 상품준비대상 주문고유번호*/
|
||||
private List<String> arrOrdrDlvyInnb;
|
||||
|
||||
/** 검색조건 */
|
||||
/** 구독서비스명 selectbox*/
|
||||
private String srchSelSubsvcNm;
|
||||
/** 구독서비스명 */
|
||||
private String srchSubsvcNm;
|
||||
/** 구독서비스기수 select */
|
||||
private String srchSelSubsvcGnr;
|
||||
/** 구독서비스기수명 */
|
||||
private String srchSubsvcGnrNm;
|
||||
/** 정렬구분 */
|
||||
private String sortDv;
|
||||
/** 배열 구독서비스고유번호 */
|
||||
private List<String> arrSubsvcInnb;
|
||||
/**당월제외*/
|
||||
private String srchCurMonExclude;
|
||||
/**주문번호*/
|
||||
private String srchOrdrInnb;
|
||||
/**주문자명*/
|
||||
private String srchMbrNm;
|
||||
/**주문자ID*/
|
||||
private String srchMbrId;
|
||||
/**구독종료여부*/
|
||||
private String srchSubEndAt;
|
||||
}
|
||||
@@ -88,18 +88,21 @@ public interface BODlvygrpMapper {
|
||||
* @param dlvyGroup
|
||||
*/
|
||||
void updateBODlvyGroupRtnlc(BODlvygrpVO dlvyGroup);
|
||||
void updateBODlvyGroupRtnlc2(BODlvygrpVO dlvyGroup);
|
||||
|
||||
/**
|
||||
* 배송그룹 반송지 등록
|
||||
* @param dlvyGroup
|
||||
*/
|
||||
void insertBODlvyGroupAddress(BODlvygrpVO dlvyGroup);
|
||||
void insertBODlvyGroupAddress2(BODlvygrpVO dlvyGroup);
|
||||
|
||||
/**
|
||||
* 배송그룹 반송지 삭제 (Y -> N)
|
||||
* @param dlvyGroup
|
||||
*/
|
||||
void deleteBODlvyGroupRtnlc(BODlvygrpVO dlvyGroup);
|
||||
void deleteBODlvyGroupRtnlc2(BODlvygrpVO dlvyGroup);
|
||||
|
||||
/**
|
||||
* 배송 반송지 조회
|
||||
|
||||
@@ -76,9 +76,11 @@ public class BODlvygrpService {
|
||||
public Map<String, Object> insertBODlvyGroup(BODlvygrpVO dlvyGroup) {
|
||||
Map<String, Object> message = new HashMap<>();
|
||||
try {
|
||||
|
||||
|
||||
// KR 반송지 등록
|
||||
mapper.insertBODlvyGroupAddress(dlvyGroup);
|
||||
// JP 반송지 등록
|
||||
mapper.insertBODlvyGroupAddress2(dlvyGroup);
|
||||
// 배송그룹 등록
|
||||
mapper.insertBODlvyGroup(dlvyGroup);
|
||||
message.put("dlvyGroupInnb", dlvyGroup.getDlvyGroupInnb());
|
||||
message.put("result", "success");
|
||||
@@ -113,6 +115,7 @@ public class BODlvygrpService {
|
||||
try {
|
||||
|
||||
mapper.updateBODlvyGroupRtnlc(dlvyGroup);
|
||||
mapper.updateBODlvyGroupRtnlc2(dlvyGroup);
|
||||
int result = mapper.updateBODlvyGroupDtl(dlvyGroup);
|
||||
message.put("result", "success");
|
||||
message.put("dlvyGroupInnb", dlvyGroup.getDlvyGroupInnb());
|
||||
@@ -137,7 +140,9 @@ public class BODlvygrpService {
|
||||
int goodsEa = mapper.isIncludeGoods(dlvyGroup);
|
||||
if(goodsEa < 1) {
|
||||
try {
|
||||
|
||||
dlvyGroup = mapper.selectBODlvyGroupDtlForm(dlvyGroup);
|
||||
mapper.deleteBODlvyGroupRtnlc(dlvyGroup);
|
||||
mapper.deleteBODlvyGroupRtnlc2(dlvyGroup);
|
||||
int result = mapper.deleteBODlvyGroup(dlvyGroup);
|
||||
message.put("result", "success");
|
||||
} catch (WnbtRestException wre){
|
||||
|
||||
@@ -73,12 +73,66 @@ public class BODlvygrpVO extends AbstractVO {
|
||||
private String rtnlcTelnb;
|
||||
|
||||
|
||||
/*반품배송비왕복금액적용여부*/
|
||||
/** 반품배송비왕복금액적용여부 */
|
||||
private String returnDlvyApplcAt;
|
||||
|
||||
/*반품배송비금액*/
|
||||
/** 반품배송비금액 */
|
||||
private String returnDlvyAmt;
|
||||
|
||||
/*왕복배송비금액*/
|
||||
/** 왕복배송비금액 */
|
||||
private String exchngDlvyAmt;
|
||||
|
||||
|
||||
/** 반송지2(JP) 고유번호 */
|
||||
private Integer rtnlcInnb2;
|
||||
|
||||
/** 반송지 우편번호2(JP) */
|
||||
private String rtnlcZip2;
|
||||
|
||||
/** 반송지 주소2(JP) */
|
||||
private String rtnlcAdres2;
|
||||
|
||||
/** 반송지 상세주소2(JP) */
|
||||
@Length(min=0, max=100, message = "반송지(JP상세주소)")
|
||||
private String rtnlcDtlAdres2;
|
||||
|
||||
/** 반송지 전화번호2(JP) */
|
||||
private String rtnlcTelnb2;
|
||||
|
||||
/** 기본배송비2(JP) */
|
||||
private String dftDlvyAmt2;
|
||||
|
||||
/** 금액조건2(JP) */
|
||||
private String amtCndUseAt2;
|
||||
|
||||
/** 금액조건 추가금액2(JP) */
|
||||
private String amtCndAditAmt2;
|
||||
|
||||
/** 개수조건2(JP) */
|
||||
private String cntCndUseAt2;
|
||||
|
||||
/** 개수조건 추가금액2(JP) */
|
||||
private String cntCndAditAmt2;
|
||||
|
||||
/** 배송지역추가여부2(JP) */
|
||||
private String dlvyAreaAditAt2;
|
||||
|
||||
/** 지역추가배송비2(JP) */
|
||||
private String areaAditDlvyAmt2;
|
||||
|
||||
/** 묶음배송 사용여부2(JP) */
|
||||
private String bundleDlvyUseAt2;
|
||||
|
||||
/** 묶음배송 조건금액2(JP) */
|
||||
private String bundleDlvyCndAmt2;
|
||||
|
||||
/** 반품배송비왕복금액적용여부2(JP) */
|
||||
private String returnDlvyApplcAt2;
|
||||
|
||||
/** 반품배송비금액2(JP) */
|
||||
private String returnDlvyAmt2;
|
||||
|
||||
/** 왕복배송비금액2(JP) */
|
||||
private String exchngDlvyAmt2;
|
||||
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import java.util.List;
|
||||
|
||||
import com.wb.domainserver.domain.comm.vo.AbstractVO;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* 주문 설정 VO
|
||||
@@ -23,6 +24,7 @@ import lombok.Data;
|
||||
* </pre>
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper=true)
|
||||
public class BOSetupOrdrVO extends AbstractVO {
|
||||
/** 쇼핑몰 코드 */
|
||||
private String sopmalCd;
|
||||
|
||||
@@ -0,0 +1,441 @@
|
||||
package com.wb.domainserver.domain.mngr.goods.subsvc.controller;
|
||||
|
||||
import com.google.j2objc.annotations.Property;
|
||||
import com.wb.domainserver.common.msg.GconeMessageSource;
|
||||
import com.wb.domainserver.common.mvc.tags.ui.pagination.PaginationInfo;
|
||||
import com.wb.domainserver.common.prop.PaginationProperties;
|
||||
import com.wb.domainserver.domain.admin.sys.comncd.service.BOMaComncdService;
|
||||
import com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO;
|
||||
import com.wb.domainserver.domain.gcone.common.service.BOCommonService;
|
||||
import com.wb.domainserver.domain.gcone.goods.cmnuse.vo.BOCmnuseVO;
|
||||
import com.wb.domainserver.domain.gcone.goods.goods.vo.BOGoodsVO;
|
||||
import com.wb.domainserver.domain.gcone.goods.goodsinfo.vo.BOGoodsInfoVO;
|
||||
import com.wb.domainserver.domain.gcone.goods.subsvc.service.BOSubsvcService;
|
||||
import com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO;
|
||||
import com.wb.domainserver.domain.gcone.setup.dlvygrp.vo.BODlvygrpVO;
|
||||
import com.wb.domainserver.domain.mngr.goods.goodsinfo.vo.GoodsInfoVO;
|
||||
import com.wb.domainserver.exception.WnbtRestException;
|
||||
import com.wb.domainserver.response.WnbtResponse;
|
||||
import com.wb.domainserver.response.WnbtResponseBody;
|
||||
import com.wb.domainserver.security.authentication.AnonymousUser;
|
||||
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
|
||||
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
|
||||
import com.wb.domainserver.security.authorization.annotation.Policy;
|
||||
import com.wb.domainserver.util.communicate.SendToResrc;
|
||||
import com.wb.domainserver.util.communicate.ValidateResultConverter;
|
||||
import com.wb.domainserver.util.dataaccess.DataMap;
|
||||
import com.wb.domainserver.util.file.service.FileStorageService;
|
||||
import com.wb.domainserver.util.file.vo.FileVo;
|
||||
import io.micrometer.common.util.StringUtils;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.ModelMap;
|
||||
import org.springframework.validation.BindingResult;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.CookieValue;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* SubsvcController Controller Class
|
||||
*
|
||||
* @author
|
||||
* @since 2026-01-23
|
||||
* @version 1.0
|
||||
* @see
|
||||
*
|
||||
* <pre>
|
||||
* == (Modification Information) == 개정이력
|
||||
*
|
||||
* 수정일 수정자 수정내용
|
||||
* ------- -------- ---------------------------
|
||||
* 2026-01-23 jazz 최초 생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
|
||||
@Slf4j
|
||||
@Controller
|
||||
@RequestMapping("/mngr/goods/subsvc")
|
||||
public class SubsvcController {
|
||||
|
||||
/** WebClient 호출을 위한 wrapper */
|
||||
@Autowired
|
||||
private SendToResrc sendToResrc;
|
||||
|
||||
/** 공통 메시지 처리를 위한 메시지 객체 */
|
||||
@Autowired
|
||||
private GconeMessageSource gconeMessageSource;
|
||||
/** 파일 업로드 */
|
||||
@Autowired
|
||||
private FileStorageService filestore;
|
||||
|
||||
@Value("${mngrfo.common.fileupload.uploaddirs.web}")
|
||||
private String uploadWebFilePath;
|
||||
@Value("${mngrfo.common.subsvc.dft-goods-optn-innb}")
|
||||
private String dftGoodsOptnInnb;
|
||||
@Autowired
|
||||
private BOSubsvcService boSubsvcService;
|
||||
@Autowired
|
||||
private BOCommonService commonService;
|
||||
@Autowired
|
||||
private BOMaComncdService boMaComncdService;
|
||||
@Autowired
|
||||
private PaginationProperties paginationProperties;
|
||||
|
||||
/**
|
||||
* 구독서비스 목록 조회 폼
|
||||
* @param vo
|
||||
* @return SubsvcListForm.jsp
|
||||
*/
|
||||
@Policy(AuthPolicy.RESTRICTED)
|
||||
@RequestMapping(value="/selectSubsvcListForm")
|
||||
public String selectSubsvcListForm(BOSubsvcVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
|
||||
vo.setSopmalCd(authSopmalCd);
|
||||
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
|
||||
if("01".equals(user.getSysDvCd())){
|
||||
vo.setSopmalCd(user.getSopmalCd());
|
||||
}
|
||||
|
||||
Map<String, Object> content = new HashMap<>();
|
||||
content.put("paramVO", vo);
|
||||
|
||||
// 조회조건 구독서비스
|
||||
List<?> SrchSubsvcList = boSubsvcService.selectBOMngrSrchSubsvcList(vo);
|
||||
content.put("srchSubsvcList", SrchSubsvcList);
|
||||
|
||||
//조회조건 판매상태
|
||||
BOMaComncdVO param = new BOMaComncdVO();
|
||||
param.setGroupCd("GOODS_STTUS");
|
||||
List<?> srchSubsvcSttusList = boMaComncdService.selectBOCommcdDetailList(param);
|
||||
content.put("srchSubsvcSttusList", srchSubsvcSttusList);
|
||||
|
||||
//조회조건 노출구분
|
||||
param.setGroupCd("EXPSR_DV");
|
||||
List<?> srchExpsrDvList = boMaComncdService.selectBOCommcdDetailList(param);
|
||||
content.put("srchExpsrDvList", srchExpsrDvList);
|
||||
|
||||
model.addAttribute("resultMap", content);
|
||||
return "mngr/goods/subsvc/SubsvcListForm";
|
||||
}
|
||||
|
||||
/**
|
||||
* 구독서비스 수정화면
|
||||
* @param vo
|
||||
* @return SubsvcDtlU.jsp
|
||||
*/
|
||||
@Policy(AuthPolicy.RESTRICTED)
|
||||
@RequestMapping(value="/selectSubsvcDtlForm")
|
||||
public String selectSubsvcDtlForm(BOSubsvcVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
|
||||
vo.setSopmalCd(authSopmalCd);
|
||||
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
|
||||
if ("01".equals(user.getSysDvCd())) {
|
||||
vo.setSopmalCd(user.getSopmalCd());
|
||||
}
|
||||
|
||||
Map<String, Object> content = new HashMap<>();
|
||||
content.put("paramVO", vo);
|
||||
|
||||
// 구독서비스 상세조회
|
||||
DataMap subsvcDtl = boSubsvcService.selectBOSubsvcDetail(vo);
|
||||
content.put("subsvcDtl", subsvcDtl);
|
||||
|
||||
//판매상태
|
||||
BOMaComncdVO param = new BOMaComncdVO();
|
||||
param.setGroupCd("GOODS_STTUS");
|
||||
List<?> subsvcSttusList = boMaComncdService.selectBOCommcdDetailList(param);
|
||||
content.put("subsvcSttusList", subsvcSttusList);
|
||||
|
||||
//노출구분
|
||||
param.setGroupCd("EXPSR_DV");
|
||||
List<?> expsrDvList = boMaComncdService.selectBOCommcdDetailList(param);
|
||||
content.put("expsrDvList", expsrDvList);
|
||||
|
||||
//가용재고정책
|
||||
param.setGroupCd("INVNTRY_POLICY");
|
||||
List<?> invntryPolicyList = boMaComncdService.selectBOCommcdDetailList(param);
|
||||
content.put("invntryPolicyList", invntryPolicyList);
|
||||
|
||||
model.addAttribute("resultMap", content);
|
||||
return "mngr/goods/subsvc/SubsvcU";
|
||||
}
|
||||
|
||||
/**
|
||||
* 구독서비스 수정
|
||||
* @param vo
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@Policy(AuthPolicy.RESTRICTED)
|
||||
@RequestMapping(value = "/updateSubsvc", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
public ResponseEntity<WnbtResponse> updateSubsvc(BOSubsvcVO vo, HttpServletRequest request, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
|
||||
vo.setSopmalCd(authSopmalCd);
|
||||
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
|
||||
vo.setUpdusr(user.getUserInnb());
|
||||
if ("01".equals(user.getSysDvCd())) {
|
||||
vo.setSopmalCd(user.getSopmalCd());
|
||||
}
|
||||
|
||||
//파일 업로드 관련 START
|
||||
List<HashMap<String, Object>> uploadFileMap = new ArrayList<HashMap<String, Object>>();
|
||||
|
||||
request.setAttribute("shopCd", vo.getSopmalCd());
|
||||
request.setAttribute("pathGubun", "GDIG"); //이미지구분코드 - 상품
|
||||
|
||||
try {
|
||||
/*파일 업로드 후 경로 추출하여 vo에 셋팅*/
|
||||
uploadFileMap = filestore.fileUpload(request);
|
||||
if(uploadFileMap.size() == 1){
|
||||
FileVo thumbNail = (FileVo) uploadFileMap.get(0).get("thumbNail");
|
||||
vo.setImg( uploadFileMap.get(0).get("filePath")+ File.separator + thumbNail.getFileName());
|
||||
}
|
||||
} catch (WnbtRestException wre) {
|
||||
log.error(wre.getMessage(), wre);
|
||||
throw new WnbtRestException("파일 업로드에 실패했습니다." + wre.getMessage());
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
throw new WnbtRestException("파일 업로드에 실패했습니다." + e.getMessage());
|
||||
}
|
||||
//파일 업로드 관련 END
|
||||
|
||||
Map<String, Object> message = new HashMap<>();
|
||||
String result = boSubsvcService.updateBOMngrSubsvc(vo);
|
||||
message.put("message",result);
|
||||
|
||||
return ResponseEntity.ok(
|
||||
WnbtResponse.builder()
|
||||
.resBody(new WnbtResponseBody(message))
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 구독서비스 등록(복사)품
|
||||
* @param vo
|
||||
* @return SubsvcC.jsp
|
||||
*/
|
||||
@Policy(AuthPolicy.RESTRICTED)
|
||||
@RequestMapping(value="/selectSubsvcRegistForm")
|
||||
public String selectSubsvcRegistForm(BOSubsvcVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
|
||||
vo.setSopmalCd(authSopmalCd);
|
||||
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
|
||||
if ("01".equals(user.getSysDvCd())) {
|
||||
vo.setSopmalCd(user.getSopmalCd());
|
||||
}
|
||||
|
||||
Map<String, Object> content = new HashMap<>();
|
||||
content.put("paramVO", vo);
|
||||
|
||||
// 구독서비스 상세조회
|
||||
DataMap subsvcDtl = boSubsvcService.selectBOSubsvcDetail(vo);
|
||||
content.put("subsvcDtl", subsvcDtl);
|
||||
|
||||
//판매상태
|
||||
BOMaComncdVO param = new BOMaComncdVO();
|
||||
param.setGroupCd("GOODS_STTUS");
|
||||
List<?> subsvcSttusList = boMaComncdService.selectBOCommcdDetailList(param);
|
||||
content.put("subsvcSttusList", subsvcSttusList);
|
||||
|
||||
//노출구분
|
||||
param.setGroupCd("EXPSR_DV");
|
||||
List<?> expsrDvList = boMaComncdService.selectBOCommcdDetailList(param);
|
||||
content.put("expsrDvList", expsrDvList);
|
||||
|
||||
//가용재고정책
|
||||
param.setGroupCd("INVNTRY_POLICY");
|
||||
List<?> invntryPolicyList = boMaComncdService.selectBOCommcdDetailList(param);
|
||||
content.put("invntryPolicyList", invntryPolicyList);
|
||||
|
||||
model.addAttribute("resultMap", content);
|
||||
return "mngr/goods/subsvc/SubsvcC";
|
||||
}
|
||||
|
||||
/**
|
||||
* 구독서비스 등록
|
||||
* @param vo
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@Policy(AuthPolicy.RESTRICTED)
|
||||
@RequestMapping(value = "/insertSubsvc", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
public ResponseEntity<WnbtResponse> insertSubsvc(BOSubsvcVO vo, HttpServletRequest request, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
|
||||
vo.setSopmalCd(authSopmalCd);
|
||||
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
|
||||
vo.setRegusr(user.getUserInnb());
|
||||
if ("01".equals(user.getSysDvCd())) {
|
||||
vo.setSopmalCd(user.getSopmalCd());
|
||||
}
|
||||
|
||||
//파일 업로드 관련 START
|
||||
List<HashMap<String, Object>> uploadFileMap = new ArrayList<HashMap<String, Object>>();
|
||||
|
||||
request.setAttribute("shopCd", vo.getSopmalCd());
|
||||
request.setAttribute("pathGubun", "GDIG"); //이미지구분코드 - 상품
|
||||
|
||||
try {
|
||||
/*파일 업로드 후 경로 추출하여 vo에 셋팅*/
|
||||
uploadFileMap = filestore.fileUpload(request);
|
||||
if(uploadFileMap.size() == 1){
|
||||
FileVo thumbNail = (FileVo) uploadFileMap.get(0).get("thumbNail");
|
||||
vo.setImg( uploadFileMap.get(0).get("filePath")+ File.separator + thumbNail.getFileName());
|
||||
}
|
||||
} catch (WnbtRestException wre) {
|
||||
log.error(wre.getMessage(), wre);
|
||||
throw new WnbtRestException("파일 업로드에 실패했습니다." + wre.getMessage());
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
throw new WnbtRestException("파일 업로드에 실패했습니다." + e.getMessage());
|
||||
}
|
||||
//파일 업로드 관련 END
|
||||
|
||||
//기본상품옵션번호셋팅
|
||||
vo.setDftGoodsOptnInnb(dftGoodsOptnInnb);
|
||||
|
||||
Map<String, Object> message = new HashMap<>();
|
||||
String result = boSubsvcService.insertBOMngrSubsvc(vo);
|
||||
message.put("message",result);
|
||||
|
||||
return ResponseEntity.ok(
|
||||
WnbtResponse.builder()
|
||||
.resBody(new WnbtResponseBody(message))
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 구독서비스 목록 조회 리스트
|
||||
* @param vo
|
||||
* @param model
|
||||
* @return SubsvcList.jsp
|
||||
*/
|
||||
@Policy(AuthPolicy.RESTRICTED)
|
||||
@RequestMapping(value = "/selectSubsvcList")
|
||||
public String selectSubsvcList(BOSubsvcVO vo,ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
|
||||
vo.setSopmalCd(authSopmalCd);
|
||||
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
|
||||
if("01".equals(user.getSysDvCd())){
|
||||
vo.setSopmalCd(user.getSopmalCd());
|
||||
}
|
||||
|
||||
// 페이징 객체 생성 & 페이징정보 할당
|
||||
PaginationInfo paginationInfo = new PaginationInfo();
|
||||
paginationInfo.setCurrentPageNo(vo.getPageIndex());
|
||||
paginationInfo.setRecordCountPerPage(vo.getPageUnit());
|
||||
paginationInfo.setPageSize(paginationProperties.getPageSize());
|
||||
|
||||
vo.setPaginationInfo(paginationInfo);
|
||||
vo.setFirstIndex(paginationInfo.getFirstRecordIndex());
|
||||
vo.setLastIndex(paginationInfo.getLastRecordIndex());
|
||||
vo.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
|
||||
if(StringUtils.isEmpty(vo.getSortDv())){
|
||||
//정렬기준 초기값 셋팅
|
||||
vo.setSortDv("subsvcGnrAsc");
|
||||
}
|
||||
|
||||
// 목록 조회
|
||||
List<DataMap> list = boSubsvcService.selectBOMngrSubsvcList(vo);
|
||||
|
||||
Map<String, Object> content = new HashMap<>();
|
||||
content.put("paramVO", vo);
|
||||
|
||||
content.put("list", list);
|
||||
content.put("paginationInfo", vo.getPaginationInfo());
|
||||
|
||||
model.addAttribute("resultMap", content);
|
||||
|
||||
return "mngr/goods/subsvc/SubsvcList";
|
||||
}
|
||||
|
||||
/**
|
||||
* 구독서비스명 중복체크
|
||||
* @param vo
|
||||
* @return ResponseEntity<WnbtResponse>
|
||||
*/
|
||||
@Policy(AuthPolicy.RESTRICTED)
|
||||
@RequestMapping(value = "/selectSubsvcNmDupCheck", produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
public ResponseEntity<WnbtResponse> selectSubsvcNmDupCheck(BOSubsvcVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
|
||||
vo.setSopmalCd(authSopmalCd);
|
||||
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
|
||||
if("01".equals(user.getSysDvCd())){
|
||||
vo.setSopmalCd(user.getSopmalCd());
|
||||
}
|
||||
|
||||
DataMap message = new DataMap();
|
||||
String result = boSubsvcService.selectBOMngrSubsvcNmDupCheck(vo);
|
||||
message.put("message", result);
|
||||
|
||||
return ResponseEntity.ok(
|
||||
WnbtResponse.builder()
|
||||
.resBody(new WnbtResponseBody(message))
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 구독서비스 선택삭제
|
||||
* @param vo
|
||||
* @return ResponseEntity<WnbtResponse>
|
||||
*/
|
||||
@Policy(AuthPolicy.RESTRICTED)
|
||||
@RequestMapping(value = "/deleteSubsvc", produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
public ResponseEntity<WnbtResponse> deleteSubsvc(BOSubsvcVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
|
||||
vo.setSopmalCd(authSopmalCd);
|
||||
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
|
||||
vo.setUpdusr(user.getUserInnb()); //수정자
|
||||
|
||||
if("01".equals(user.getSysDvCd())){
|
||||
vo.setSopmalCd(user.getSopmalCd());
|
||||
}
|
||||
|
||||
DataMap message = new DataMap();
|
||||
String result = boSubsvcService.deleteBOMngrSubsvc(vo);
|
||||
message.put("message", result);
|
||||
|
||||
return ResponseEntity.ok(
|
||||
WnbtResponse.builder()
|
||||
.resBody(new WnbtResponseBody(message))
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 구독서비스 목록 조회 리스트
|
||||
* @param vo
|
||||
* @return ResponseEntity<WnbtResponse>
|
||||
*/
|
||||
@Policy(AuthPolicy.RESTRICTED)
|
||||
@RequestMapping(value = "/selectSrchSubsvcGnrListAjax", produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
public ResponseEntity<WnbtResponse> selectSrchSubsvcGnrListAjax(BOSubsvcVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
|
||||
vo.setSopmalCd(authSopmalCd);
|
||||
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
|
||||
if("01".equals(user.getSysDvCd())){
|
||||
vo.setSopmalCd(user.getSopmalCd());
|
||||
}
|
||||
|
||||
Map<String, Object> content = new HashMap<>();
|
||||
|
||||
// 조회조건 구독서비스
|
||||
List<DataMap> SrchSubsvcGnrList = boSubsvcService.selectBOMngrSrchSubsvcGnrList(vo);
|
||||
content.put("srchSubsvcGnrList", SrchSubsvcGnrList);
|
||||
|
||||
return ResponseEntity.ok(
|
||||
WnbtResponse.builder()
|
||||
.resBody(new WnbtResponseBody(content))
|
||||
.build()
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,453 @@
|
||||
package com.wb.domainserver.domain.mngr.ordr.subsvc.controller;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.wb.domainserver.common.msg.GconeMessageSource;
|
||||
import com.wb.domainserver.common.mvc.tags.ui.pagination.PaginationInfo;
|
||||
import com.wb.domainserver.common.prop.PaginationProperties;
|
||||
import com.wb.domainserver.domain.admin.store.sopmal.service.BOMaSopmalService;
|
||||
import com.wb.domainserver.domain.admin.sys.comncd.service.BOMaComncdService;
|
||||
import com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO;
|
||||
import com.wb.domainserver.domain.gcone.common.service.BOCommonService;
|
||||
import com.wb.domainserver.domain.gcone.goods.purchs.service.BOOrderService;
|
||||
import com.wb.domainserver.domain.gcone.goods.purchs.vo.BOOrderLogVO;
|
||||
import com.wb.domainserver.domain.gcone.goods.subsvc.service.BOSubsvcService;
|
||||
import com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO;
|
||||
import com.wb.domainserver.domain.gcone.ordr.ordr.service.BOOrdrService;
|
||||
import com.wb.domainserver.domain.gcone.ordr.ordr.vo.*;
|
||||
import com.wb.domainserver.domain.gcone.ordr.pay.vo.BOPayVO;
|
||||
import com.wb.domainserver.domain.gcone.ordr.subsvc.service.BOSubsvcOrdrService;
|
||||
import com.wb.domainserver.domain.gcone.ordr.subsvc.vo.BOSubsvcOrderVO;
|
||||
import com.wb.domainserver.domain.gcone.setup.dlvygrp.service.BODlvygrpService;
|
||||
import com.wb.domainserver.domain.gcone.setup.nbkk.service.BONbkkService;
|
||||
import com.wb.domainserver.domain.gcone.setup.nbkk.vo.BOSetupNbkkVO;
|
||||
import com.wb.domainserver.domain.mngr.ordr.ordrmngr.vo.DwldItmVO;
|
||||
import com.wb.domainserver.domain.mngr.ordr.ordrmngr.vo.OrdrShippingVO;
|
||||
import com.wb.domainserver.domain.mngr.ordr.ordrmngr.vo.OrdrSrchVO;
|
||||
import com.wb.domainserver.exception.WnbtRestException;
|
||||
import com.wb.domainserver.exception.code.ErrorCode;
|
||||
import com.wb.domainserver.response.WnbtResponse;
|
||||
import com.wb.domainserver.response.WnbtResponseBody;
|
||||
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
|
||||
import com.wb.domainserver.security.authentication.AnonymousUser;
|
||||
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
|
||||
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
|
||||
import com.wb.domainserver.security.authorization.annotation.Policy;
|
||||
import com.wb.domainserver.util.communicate.SendToResrc;
|
||||
import com.wb.domainserver.util.communicate.ValidateResultConverter;
|
||||
import com.wb.domainserver.util.dataaccess.DataMap;
|
||||
import com.wb.domainserver.util.excel.ExcelDownloadUtil;
|
||||
import io.micrometer.common.util.StringUtils;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.ModelMap;
|
||||
import org.springframework.validation.BindingResult;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.CookieValue;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.math.BigInteger;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 구독서비스 주문 관리 Controller
|
||||
*
|
||||
* @author jazz
|
||||
* @since 2026-02-05
|
||||
* @version 1.0
|
||||
* @see
|
||||
*
|
||||
* <pre>
|
||||
* == (Modification Information) == 개정이력
|
||||
*
|
||||
* 수정일 수정자 수정내용
|
||||
* ------- -------- ---------------------------
|
||||
* 2026-02-05 jazz 최초 생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
|
||||
@Controller
|
||||
@RequestMapping("/mngr/ordr/subsvc")
|
||||
@Slf4j
|
||||
public class SubsvcOrdrController {
|
||||
|
||||
/** WebClient 호출을 위한 wrapper */
|
||||
@Autowired
|
||||
private WnbtWebClientResponseHandler responseHandler;
|
||||
|
||||
/** WebClient 호출을 위한 wrapper */
|
||||
@Autowired
|
||||
private SendToResrc sendToResrc;
|
||||
/** 공통 메시지 처리를 위한 메시지 객체 */
|
||||
@Autowired
|
||||
private GconeMessageSource gconeMessageSource;
|
||||
|
||||
@Autowired
|
||||
private BOSubsvcOrdrService boSubsvcOrdrService;
|
||||
|
||||
@Autowired
|
||||
private BOSubsvcService boSubsvcService;
|
||||
|
||||
@Autowired
|
||||
private PaginationProperties paginationProperties;
|
||||
|
||||
|
||||
/**
|
||||
* 구독서비스 상품준비 조회 폼
|
||||
* @param subsvcVO,subsvcOrderVO,model,authSopmalCd
|
||||
* @return SubsvcOrdrListForm.jsp
|
||||
*/
|
||||
@Policy(AuthPolicy.RESTRICTED)
|
||||
@RequestMapping(value="/selectSubsvcOrdrListForm")
|
||||
public String selectSubsvcOrdrListForm(BOSubsvcVO subsvcVO, BOSubsvcOrderVO subsvcOrderVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
|
||||
subsvcVO.setSopmalCd(authSopmalCd);
|
||||
subsvcOrderVO.setSopmalCd(authSopmalCd);
|
||||
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
|
||||
if("01".equals(user.getSysDvCd())){
|
||||
subsvcVO.setSopmalCd(user.getSopmalCd());
|
||||
subsvcOrderVO.setSopmalCd(user.getSopmalCd());
|
||||
}
|
||||
|
||||
Map<String, Object> content = new HashMap<>();
|
||||
content.put("paramVO", subsvcOrderVO);
|
||||
|
||||
// 조회조건 구독서비스
|
||||
List<?> SrchSubsvcList = boSubsvcService.selectBOMngrSrchSubsvcList(subsvcVO);
|
||||
content.put("srchSubsvcList", SrchSubsvcList);
|
||||
|
||||
model.addAttribute("resultMap", content);
|
||||
return "mngr/ordr/subsvc/SubsvcOrdrListForm";
|
||||
}
|
||||
|
||||
/**
|
||||
* 구독서비스 상품준비 목록 조회 리스트
|
||||
* @param subsvcOrderVO
|
||||
* @param model
|
||||
* @return SubsvcOrdrList.jsp
|
||||
*/
|
||||
@Policy(AuthPolicy.RESTRICTED)
|
||||
@RequestMapping(value = "/selectSubsvcOrdrList")
|
||||
public String selectSubsvcOrdrList(BOSubsvcOrderVO subsvcOrderVO,ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
|
||||
subsvcOrderVO.setSopmalCd(authSopmalCd);
|
||||
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
|
||||
if("01".equals(user.getSysDvCd())){
|
||||
subsvcOrderVO.setSopmalCd(user.getSopmalCd());
|
||||
}
|
||||
|
||||
// 페이징 객체 생성 & 페이징정보 할당
|
||||
PaginationInfo paginationInfo = new PaginationInfo();
|
||||
paginationInfo.setCurrentPageNo(subsvcOrderVO.getPageIndex());
|
||||
paginationInfo.setRecordCountPerPage(subsvcOrderVO.getPageUnit());
|
||||
paginationInfo.setPageSize(paginationProperties.getPageSize());
|
||||
|
||||
subsvcOrderVO.setPaginationInfo(paginationInfo);
|
||||
subsvcOrderVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
|
||||
subsvcOrderVO.setLastIndex(paginationInfo.getLastRecordIndex());
|
||||
subsvcOrderVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
|
||||
if(StringUtils.isEmpty(subsvcOrderVO.getSortDv())){
|
||||
//정렬기준 초기값 셋팅
|
||||
subsvcOrderVO.setSortDv("subsvcGnrAsc");
|
||||
}
|
||||
|
||||
// 목록 조회
|
||||
List<DataMap> list = boSubsvcOrdrService.selectBOSubsvcOrderList(subsvcOrderVO);
|
||||
|
||||
Map<String, Object> content = new HashMap<>();
|
||||
content.put("paramVO", subsvcOrderVO);
|
||||
|
||||
content.put("list", list);
|
||||
content.put("paginationInfo", subsvcOrderVO.getPaginationInfo());
|
||||
|
||||
model.addAttribute("resultMap", content);
|
||||
|
||||
return "mngr/ordr/subsvc/SubsvcOrdrList";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 구독서비스 상품준비 일괄처리
|
||||
* @param subsvcOrderVO
|
||||
* @return ResponseEntity<WnbtResponse>
|
||||
*/
|
||||
@Policy(AuthPolicy.RESTRICTED)
|
||||
@RequestMapping(value = "/updateSubsvcOrdrReady", produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
public ResponseEntity<WnbtResponse> updateSubsvcOrdrReady(BOSubsvcOrderVO subsvcOrderVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
|
||||
subsvcOrderVO.setSopmalCd(authSopmalCd);
|
||||
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
|
||||
|
||||
if("01".equals(user.getSysDvCd())){
|
||||
subsvcOrderVO.setSopmalCd(user.getSopmalCd());
|
||||
}
|
||||
/**
|
||||
* 체크대상정보 파싱
|
||||
* 형태 : 주문고유번호@주문상품고유번호@주문상품옵션고유번호@주문배송고유번호
|
||||
* */
|
||||
subsvcOrderVO.setArrOrdrInnb(new ArrayList<String>());
|
||||
subsvcOrderVO.setArrOrdrGoodsInnb(new ArrayList<String>());
|
||||
subsvcOrderVO.setArrOrdrGoodsOptnInnb(new ArrayList<String>());
|
||||
subsvcOrderVO.setArrOrdrDlvyInnb(new ArrayList<String>());
|
||||
ArrayList<String> arrCheck = (ArrayList<String>)subsvcOrderVO.getArrCheck();
|
||||
|
||||
((ArrayList<String>)subsvcOrderVO.getArrCheck()).forEach(check -> {
|
||||
String[] innb = check.split("@");
|
||||
subsvcOrderVO.getArrOrdrInnb().add(innb[0]);
|
||||
subsvcOrderVO.getArrOrdrGoodsInnb().add(innb[1]);
|
||||
subsvcOrderVO.getArrOrdrGoodsOptnInnb().add(innb[2]);
|
||||
subsvcOrderVO.getArrOrdrDlvyInnb().add(innb[3]);
|
||||
});
|
||||
|
||||
DataMap message = new DataMap();
|
||||
String result = "";
|
||||
|
||||
try{
|
||||
result = boSubsvcOrdrService.updateSubsvcOrdrReady(subsvcOrderVO);
|
||||
}catch(Exception e){
|
||||
log.error(e.getMessage());
|
||||
result = "fail";
|
||||
}
|
||||
|
||||
message.put("message", result);
|
||||
|
||||
return ResponseEntity.ok(
|
||||
WnbtResponse.builder()
|
||||
.resBody(new WnbtResponseBody(message))
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 구독서비스 상품준비 배송내역 목록 팝업
|
||||
* @param subsvcOrderVO
|
||||
* @param model
|
||||
* @return SubsvcOrdrList.jsp
|
||||
*/
|
||||
@Policy(AuthPolicy.RESTRICTED)
|
||||
@RequestMapping(value = "/selectSubsvcOrdrDlvyListPop")
|
||||
public String selectSubsvcOrdrDlvyListPop(BOSubsvcOrderVO subsvcOrderVO,ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
|
||||
subsvcOrderVO.setSopmalCd(authSopmalCd);
|
||||
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
|
||||
if("01".equals(user.getSysDvCd())){
|
||||
subsvcOrderVO.setSopmalCd(user.getSopmalCd());
|
||||
}
|
||||
// 목록 조회
|
||||
List<DataMap> list = boSubsvcOrdrService.selectBOSubsvcOrderDlvyList(subsvcOrderVO);
|
||||
|
||||
Map<String, Object> content = new HashMap<>();
|
||||
content.put("paramVO", subsvcOrderVO);
|
||||
|
||||
content.put("list", list);
|
||||
|
||||
model.addAttribute("resultMap", content);
|
||||
|
||||
return "mngr/ordr/subsvc/SubsvcOrdrDlvyListPop";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 구독서비스 상품변경 조회 폼
|
||||
* @param subsvcVO,subsvcOrderVO,model,authSopmalCd
|
||||
* @return SubsvcOrdrMappedListForm.jsp
|
||||
*/
|
||||
@Policy(AuthPolicy.RESTRICTED)
|
||||
@RequestMapping(value="/selectSubsvcOrdrMappedListForm")
|
||||
public String selectSubsvcOrdrMappedListForm(BOSubsvcVO subsvcVO, BOSubsvcOrderVO subsvcOrderVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
|
||||
subsvcVO.setSopmalCd(authSopmalCd);
|
||||
subsvcOrderVO.setSopmalCd(authSopmalCd);
|
||||
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
|
||||
if("01".equals(user.getSysDvCd())){
|
||||
subsvcVO.setSopmalCd(user.getSopmalCd());
|
||||
subsvcOrderVO.setSopmalCd(user.getSopmalCd());
|
||||
}
|
||||
|
||||
Map<String, Object> content = new HashMap<>();
|
||||
content.put("paramVO", subsvcOrderVO);
|
||||
|
||||
// 조회조건 구독서비스
|
||||
List<?> SrchSubsvcList = boSubsvcService.selectBOMngrSrchSubsvcList(subsvcVO);
|
||||
content.put("srchSubsvcList", SrchSubsvcList);
|
||||
|
||||
model.addAttribute("resultMap", content);
|
||||
return "mngr/ordr/subsvc/SubsvcOrdrMappedListForm";
|
||||
}
|
||||
|
||||
/**
|
||||
* 구독서비스 상품변경 목록 조회 리스트
|
||||
* @param subsvcOrderVO
|
||||
* @param model
|
||||
* @return SubsvcOrdrMappedList.jsp
|
||||
*/
|
||||
@Policy(AuthPolicy.RESTRICTED)
|
||||
@RequestMapping(value = "/selectSubsvcOrdrMappedList")
|
||||
public String selectSubsvcOrdrMappedList(BOSubsvcOrderVO subsvcOrderVO,ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
|
||||
subsvcOrderVO.setSopmalCd(authSopmalCd);
|
||||
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
|
||||
if("01".equals(user.getSysDvCd())){
|
||||
subsvcOrderVO.setSopmalCd(user.getSopmalCd());
|
||||
}
|
||||
|
||||
// 페이징 객체 생성 & 페이징정보 할당
|
||||
PaginationInfo paginationInfo = new PaginationInfo();
|
||||
paginationInfo.setCurrentPageNo(subsvcOrderVO.getPageIndex());
|
||||
paginationInfo.setRecordCountPerPage(subsvcOrderVO.getPageUnit());
|
||||
paginationInfo.setPageSize(paginationProperties.getPageSize());
|
||||
|
||||
subsvcOrderVO.setPaginationInfo(paginationInfo);
|
||||
subsvcOrderVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
|
||||
subsvcOrderVO.setLastIndex(paginationInfo.getLastRecordIndex());
|
||||
subsvcOrderVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
|
||||
if(StringUtils.isEmpty(subsvcOrderVO.getSortDv())){
|
||||
//정렬기준 초기값 셋팅
|
||||
subsvcOrderVO.setSortDv("subsvcGnrAsc");
|
||||
}
|
||||
|
||||
// 목록 조회
|
||||
List<DataMap> list = boSubsvcOrdrService.selectBOSubsvcOrderMappedList(subsvcOrderVO);
|
||||
|
||||
Map<String, Object> content = new HashMap<>();
|
||||
content.put("paramVO", subsvcOrderVO);
|
||||
|
||||
content.put("list", list);
|
||||
content.put("paginationInfo", subsvcOrderVO.getPaginationInfo());
|
||||
|
||||
model.addAttribute("resultMap", content);
|
||||
|
||||
return "mngr/ordr/subsvc/SubsvcOrdrMappedList";
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 구독서비스 구독자 조회 폼
|
||||
* @param subsvcVO,subsvcOrderVO,model,authSopmalCd
|
||||
* @return SubsvcOrdrMbrListForm.jsp
|
||||
*/
|
||||
@Policy(AuthPolicy.RESTRICTED)
|
||||
@RequestMapping(value="/selectSubsvcOrdrMbrListForm")
|
||||
public String selectSubsvcOrdrMbrListForm(BOSubsvcVO subsvcVO, BOSubsvcOrderVO subsvcOrderVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
|
||||
subsvcVO.setSopmalCd(authSopmalCd);
|
||||
subsvcOrderVO.setSopmalCd(authSopmalCd);
|
||||
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
|
||||
if("01".equals(user.getSysDvCd())){
|
||||
subsvcVO.setSopmalCd(user.getSopmalCd());
|
||||
subsvcOrderVO.setSopmalCd(user.getSopmalCd());
|
||||
}
|
||||
|
||||
Map<String, Object> content = new HashMap<>();
|
||||
content.put("paramVO", subsvcOrderVO);
|
||||
|
||||
// 조회조건 구독서비스
|
||||
List<?> SrchSubsvcList = boSubsvcService.selectBOMngrSrchSubsvcList(subsvcVO);
|
||||
content.put("srchSubsvcList", SrchSubsvcList);
|
||||
|
||||
model.addAttribute("resultMap", content);
|
||||
return "mngr/ordr/subsvc/SubsvcOrdrMbrListForm";
|
||||
}
|
||||
|
||||
/**
|
||||
* 구독서비스 구독자 목록 조회 리스트
|
||||
* @param subsvcOrderVO
|
||||
* @param model
|
||||
* @return SubsvcOrdrMbrList.jsp
|
||||
*/
|
||||
@Policy(AuthPolicy.RESTRICTED)
|
||||
@RequestMapping(value = "/selectSubsvcOrdrMbrList")
|
||||
public String selectSubsvcOrdrMbrList(BOSubsvcOrderVO subsvcOrderVO,ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
|
||||
subsvcOrderVO.setSopmalCd(authSopmalCd);
|
||||
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
|
||||
if("01".equals(user.getSysDvCd())){
|
||||
subsvcOrderVO.setSopmalCd(user.getSopmalCd());
|
||||
}
|
||||
|
||||
// 페이징 객체 생성 & 페이징정보 할당
|
||||
PaginationInfo paginationInfo = new PaginationInfo();
|
||||
paginationInfo.setCurrentPageNo(subsvcOrderVO.getPageIndex());
|
||||
paginationInfo.setRecordCountPerPage(subsvcOrderVO.getPageUnit());
|
||||
paginationInfo.setPageSize(paginationProperties.getPageSize());
|
||||
|
||||
subsvcOrderVO.setPaginationInfo(paginationInfo);
|
||||
subsvcOrderVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
|
||||
subsvcOrderVO.setLastIndex(paginationInfo.getLastRecordIndex());
|
||||
subsvcOrderVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
|
||||
if(StringUtils.isEmpty(subsvcOrderVO.getSortDv())){
|
||||
//정렬기준 초기값 셋팅
|
||||
subsvcOrderVO.setSortDv("subsvcGnrAsc");
|
||||
}
|
||||
|
||||
// 목록 조회
|
||||
List<DataMap> list = boSubsvcOrdrService.selectBOSubsvcOrderMbrList(subsvcOrderVO);
|
||||
|
||||
Map<String, Object> content = new HashMap<>();
|
||||
content.put("paramVO", subsvcOrderVO);
|
||||
content.put("list", list);
|
||||
content.put("paginationInfo", subsvcOrderVO.getPaginationInfo());
|
||||
|
||||
model.addAttribute("resultMap", content);
|
||||
|
||||
return "mngr/ordr/subsvc/SubsvcOrdrMbrList";
|
||||
}
|
||||
|
||||
/**
|
||||
* 구독서비스 구독자 조회 - 구독자 목록 팝업
|
||||
* @param subsvcOrderVO
|
||||
* @param model
|
||||
* @return SubsvcOrdrList.jsp
|
||||
*/
|
||||
@Policy(AuthPolicy.RESTRICTED)
|
||||
@RequestMapping(value = "/selectSubsvcOrderMbrInfoListPop")
|
||||
public String selectSubsvcOrderMbrInfoListPop(BOSubsvcOrderVO subsvcOrderVO,ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
|
||||
subsvcOrderVO.setSopmalCd(authSopmalCd);
|
||||
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
|
||||
if("01".equals(user.getSysDvCd())){
|
||||
subsvcOrderVO.setSopmalCd(user.getSopmalCd());
|
||||
}
|
||||
//구독서비스 정보 조회
|
||||
DataMap subsvcInfo = boSubsvcOrdrService.selectBOSubsvcInfo(subsvcOrderVO);
|
||||
// 목록 조회
|
||||
List<DataMap> list = boSubsvcOrdrService.selectBOSubsvcOrderMbrInfoList(subsvcOrderVO);
|
||||
|
||||
Map<String, Object> content = new HashMap<>();
|
||||
content.put("paramVO", subsvcOrderVO);
|
||||
content.put("subsvcInfo", subsvcInfo);
|
||||
content.put("list", list);
|
||||
|
||||
model.addAttribute("resultMap", content);
|
||||
|
||||
return "mngr/ordr/subsvc/SubsvcOrderMbrInfoListPop";
|
||||
}
|
||||
|
||||
/**
|
||||
* 구독서비스 구독자 조회 - 배송상품 목록 팝업
|
||||
* @param subsvcOrderVO
|
||||
* @param model
|
||||
* @return SubsvcOrdrList.jsp
|
||||
*/
|
||||
@Policy(AuthPolicy.RESTRICTED)
|
||||
@RequestMapping(value = "/selectSubsvcOrderGoodsInfoListPop")
|
||||
public String selectSubsvcOrderGoodsInfoListPop(BOSubsvcOrderVO subsvcOrderVO,ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
|
||||
subsvcOrderVO.setSopmalCd(authSopmalCd);
|
||||
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
|
||||
if("01".equals(user.getSysDvCd())){
|
||||
subsvcOrderVO.setSopmalCd(user.getSopmalCd());
|
||||
}
|
||||
//구독서비스 정보 조회
|
||||
DataMap subsvcInfo = boSubsvcOrdrService.selectBOSubsvcInfo(subsvcOrderVO);
|
||||
// 목록 조회
|
||||
List<DataMap> list = boSubsvcOrdrService.selectBOSubsvcOrderGoodsInfoList(subsvcOrderVO);
|
||||
|
||||
Map<String, Object> content = new HashMap<>();
|
||||
content.put("paramVO", subsvcOrderVO);
|
||||
content.put("subsvcInfo", subsvcInfo);
|
||||
content.put("list", list);
|
||||
|
||||
model.addAttribute("resultMap", content);
|
||||
|
||||
return "mngr/ordr/subsvc/SubsvcOrderGoodsInfoListPop";
|
||||
}
|
||||
|
||||
}
|
||||
@@ -151,11 +151,15 @@ public class SetupDlvygrpController {
|
||||
if(bindingResult.hasErrors()) {
|
||||
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
|
||||
}
|
||||
|
||||
// VO Param setting
|
||||
// 기본배송비 null 일때 0으로 기본값 셋팅
|
||||
if(StringUtil.isEmpty(dlvyGroup.getDftDlvyAmt())) {
|
||||
dlvyGroup.setDftDlvyAmt("0");
|
||||
}
|
||||
if(StringUtil.isEmpty(dlvyGroup.getDftDlvyAmt2())) {
|
||||
dlvyGroup.setDftDlvyAmt2("0");
|
||||
}
|
||||
// 금액조건 여부가 Null 이거나 N 일때, 금액값 기본값 셋팅
|
||||
if(dlvyGroup.getAmtCndUseAt() == null || dlvyGroup.getAmtCndUseAt().equals("N")) {
|
||||
dlvyGroup.setAmtCndAditAmt("0");
|
||||
@@ -164,6 +168,13 @@ public class SetupDlvygrpController {
|
||||
dlvyGroup.setAmtCndUseAt("N");
|
||||
}
|
||||
}
|
||||
if(dlvyGroup.getAmtCndUseAt2() == null || dlvyGroup.getAmtCndUseAt2().equals("N")) {
|
||||
dlvyGroup.setAmtCndAditAmt2("0");
|
||||
// 금액조건2 여부가 null 일 때 N으로 기본값 셋팅
|
||||
if(dlvyGroup.getAmtCndUseAt2() == null) {
|
||||
dlvyGroup.setAmtCndUseAt2("N");
|
||||
}
|
||||
}
|
||||
// 개수조건 여부가 Null 이거나 N 일때, 금액값 기본값 셋팅
|
||||
if(dlvyGroup.getCntCndUseAt() == null || dlvyGroup.getCntCndUseAt().equals("N")) {
|
||||
dlvyGroup.setCntCndAditAmt("0");
|
||||
@@ -172,6 +183,13 @@ public class SetupDlvygrpController {
|
||||
dlvyGroup.setCntCndUseAt("N");
|
||||
}
|
||||
}
|
||||
if(dlvyGroup.getCntCndUseAt2() == null || dlvyGroup.getCntCndUseAt2().equals("N")) {
|
||||
dlvyGroup.setCntCndAditAmt2("0");
|
||||
// 개수조건2 여부가 null 일 때 N으로 기본값 셋팅
|
||||
if(dlvyGroup.getCntCndUseAt2() == null){
|
||||
dlvyGroup.setCntCndUseAt2("N");
|
||||
}
|
||||
}
|
||||
// 묶음배송 여부가 Null 이거나 N 일때, 금액값 기본값 셋팅
|
||||
if(dlvyGroup.getBundleDlvyUseAt() == null || dlvyGroup.getBundleDlvyUseAt().equals("N")){
|
||||
dlvyGroup.setBundleDlvyCndAmt("0");
|
||||
@@ -180,23 +198,42 @@ public class SetupDlvygrpController {
|
||||
dlvyGroup.setBundleDlvyUseAt("N");
|
||||
}
|
||||
}
|
||||
if(dlvyGroup.getBundleDlvyUseAt2() == null || dlvyGroup.getBundleDlvyUseAt2().equals("N")){
|
||||
dlvyGroup.setBundleDlvyCndAmt2("0");
|
||||
// 묶음배송 여부가 null 일 때 N으로 기본값 셋팅
|
||||
if(dlvyGroup.getBundleDlvyUseAt2() == null) {
|
||||
dlvyGroup.setBundleDlvyUseAt2("N");
|
||||
}
|
||||
}
|
||||
// 배송권역 여부가 Null 이거나 N 일때, 금액값 기본값 셋팅
|
||||
if(dlvyGroup.getDlvyAreaAditAt().equals("N")) {
|
||||
dlvyGroup.setAreaAditDlvyAmt("0");
|
||||
}
|
||||
if(dlvyGroup.getDlvyAreaAditAt2().equals("N")) {
|
||||
dlvyGroup.setAreaAditDlvyAmt2("0");
|
||||
}
|
||||
// 반품배송비 편도 null 일때 0으로 기본값 셋팅
|
||||
if(StringUtil.isEmpty(dlvyGroup.getDftDlvyAmt())) {
|
||||
if(StringUtil.isEmpty(dlvyGroup.getReturnDlvyAmt())) {
|
||||
dlvyGroup.setReturnDlvyAmt("0");
|
||||
}
|
||||
if(StringUtil.isEmpty(dlvyGroup.getReturnDlvyAmt2())) {
|
||||
dlvyGroup.setReturnDlvyAmt2("0");
|
||||
}
|
||||
// 반품배송비 왕복 null 일때 0으로 기본값 셋팅
|
||||
if(StringUtil.isEmpty(dlvyGroup.getDftDlvyAmt())) {
|
||||
if(StringUtil.isEmpty(dlvyGroup.getExchngDlvyAmt())) {
|
||||
dlvyGroup.setExchngDlvyAmt("0");
|
||||
}
|
||||
if(StringUtil.isEmpty(dlvyGroup.getExchngDlvyAmt2())) {
|
||||
dlvyGroup.setExchngDlvyAmt2("0");
|
||||
}
|
||||
|
||||
//반품 배송비 왕복금액 적용여부 null 일 경우 N 처리
|
||||
if(StringUtil.isEmpty(dlvyGroup.getReturnDlvyApplcAt())) {
|
||||
dlvyGroup.setReturnDlvyApplcAt("N");
|
||||
}
|
||||
if(StringUtil.isEmpty(dlvyGroup.getReturnDlvyApplcAt2())) {
|
||||
dlvyGroup.setReturnDlvyApplcAt2("N");
|
||||
}
|
||||
// 숫자(금액&갯수) ',' 제거
|
||||
dlvyGroup.setDftDlvyAmt(StringUtil.removeCommaChar(dlvyGroup.getDftDlvyAmt()));
|
||||
dlvyGroup.setAmtCndAditAmt(StringUtil.removeCommaChar(dlvyGroup.getAmtCndAditAmt()));
|
||||
@@ -206,6 +243,14 @@ public class SetupDlvygrpController {
|
||||
dlvyGroup.setReturnDlvyAmt(StringUtil.removeCommaChar(dlvyGroup.getReturnDlvyAmt()));
|
||||
dlvyGroup.setExchngDlvyAmt(StringUtil.removeCommaChar(dlvyGroup.getExchngDlvyAmt()));
|
||||
|
||||
dlvyGroup.setDftDlvyAmt2(StringUtil.removeCommaChar(dlvyGroup.getDftDlvyAmt2()));
|
||||
dlvyGroup.setAmtCndAditAmt2(StringUtil.removeCommaChar(dlvyGroup.getAmtCndAditAmt2()));
|
||||
dlvyGroup.setCntCndAditAmt2(StringUtil.removeCommaChar(dlvyGroup.getCntCndAditAmt2()));
|
||||
dlvyGroup.setAreaAditDlvyAmt2(StringUtil.removeCommaChar(dlvyGroup.getAreaAditDlvyAmt2()));
|
||||
dlvyGroup.setBundleDlvyCndAmt2(StringUtil.removeCommaChar(dlvyGroup.getBundleDlvyCndAmt2()));
|
||||
dlvyGroup.setReturnDlvyAmt2(StringUtil.removeCommaChar(dlvyGroup.getReturnDlvyAmt2()));
|
||||
dlvyGroup.setExchngDlvyAmt2(StringUtil.removeCommaChar(dlvyGroup.getExchngDlvyAmt2()));
|
||||
|
||||
//사용자 정보 추출 및 적용
|
||||
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
|
||||
dlvyGroup.setRegusr(user.getUserInnb());
|
||||
@@ -369,6 +414,9 @@ public class SetupDlvygrpController {
|
||||
if(StringUtil.isEmpty(dlvyGroup.getDftDlvyAmt())) {
|
||||
dlvyGroup.setDftDlvyAmt("0");
|
||||
}
|
||||
if(StringUtil.isEmpty(dlvyGroup.getDftDlvyAmt2())) {
|
||||
dlvyGroup.setDftDlvyAmt2("0");
|
||||
}
|
||||
// 금액조건 여부가 Null 이거나 N 일때, 금액값 기본값 셋팅
|
||||
if(dlvyGroup.getAmtCndUseAt() == null || dlvyGroup.getAmtCndUseAt().equals("N")) {
|
||||
dlvyGroup.setAmtCndAditAmt("0");
|
||||
@@ -377,6 +425,13 @@ public class SetupDlvygrpController {
|
||||
dlvyGroup.setAmtCndUseAt("N");
|
||||
}
|
||||
}
|
||||
if(dlvyGroup.getAmtCndUseAt2() == null || dlvyGroup.getAmtCndUseAt2().equals("N")) {
|
||||
dlvyGroup.setAmtCndAditAmt2("0");
|
||||
// 금액조건2 여부가 null 일 때 N으로 기본값 셋팅
|
||||
if(dlvyGroup.getAmtCndUseAt2() == null) {
|
||||
dlvyGroup.setAmtCndUseAt2("N");
|
||||
}
|
||||
}
|
||||
// 개수조건 여부가 Null 이거나 N 일때, 금액값 기본값 셋팅
|
||||
if(dlvyGroup.getCntCndUseAt() == null || dlvyGroup.getCntCndUseAt().equals("N")) {
|
||||
dlvyGroup.setCntCndAditAmt("0");
|
||||
@@ -385,6 +440,13 @@ public class SetupDlvygrpController {
|
||||
dlvyGroup.setCntCndUseAt("N");
|
||||
}
|
||||
}
|
||||
if(dlvyGroup.getCntCndUseAt2() == null || dlvyGroup.getCntCndUseAt2().equals("N")) {
|
||||
dlvyGroup.setCntCndAditAmt2("0");
|
||||
// 개수조건2 여부가 null 일 때 N으로 기본값 셋팅
|
||||
if(dlvyGroup.getCntCndUseAt2() == null){
|
||||
dlvyGroup.setCntCndUseAt2("N");
|
||||
}
|
||||
}
|
||||
// 묶음배송 여부가 Null 이거나 N 일때, 금액값 기본값 셋팅
|
||||
if(dlvyGroup.getBundleDlvyUseAt() == null || dlvyGroup.getBundleDlvyUseAt().equals("N")){
|
||||
dlvyGroup.setBundleDlvyCndAmt("0");
|
||||
@@ -393,26 +455,43 @@ public class SetupDlvygrpController {
|
||||
dlvyGroup.setBundleDlvyUseAt("N");
|
||||
}
|
||||
}
|
||||
if(dlvyGroup.getBundleDlvyUseAt2() == null || dlvyGroup.getBundleDlvyUseAt2().equals("N")){
|
||||
dlvyGroup.setBundleDlvyCndAmt2("0");
|
||||
// 묶음배송 여부가 null 일 때 N으로 기본값 셋팅
|
||||
if(dlvyGroup.getBundleDlvyUseAt2() == null) {
|
||||
dlvyGroup.setBundleDlvyUseAt2("N");
|
||||
}
|
||||
}
|
||||
// 배송권역 여부가 Null 이거나 N 일때, 금액값 기본값 셋팅
|
||||
if(dlvyGroup.getDlvyAreaAditAt().equals("N")) {
|
||||
dlvyGroup.setAreaAditDlvyAmt("0");
|
||||
}
|
||||
|
||||
if(dlvyGroup.getDlvyAreaAditAt2().equals("N")) {
|
||||
dlvyGroup.setAreaAditDlvyAmt2("0");
|
||||
}
|
||||
// 반품배송비 편도 null 일때 0으로 기본값 셋팅
|
||||
if(StringUtil.isEmpty(dlvyGroup.getDftDlvyAmt())) {
|
||||
if(StringUtil.isEmpty(dlvyGroup.getReturnDlvyAmt())) {
|
||||
dlvyGroup.setReturnDlvyAmt("0");
|
||||
}
|
||||
if(StringUtil.isEmpty(dlvyGroup.getReturnDlvyAmt2())) {
|
||||
dlvyGroup.setReturnDlvyAmt2("0");
|
||||
}
|
||||
// 반품배송비 왕복 null 일때 0으로 기본값 셋팅
|
||||
if(StringUtil.isEmpty(dlvyGroup.getDftDlvyAmt())) {
|
||||
if(StringUtil.isEmpty(dlvyGroup.getExchngDlvyAmt())) {
|
||||
dlvyGroup.setExchngDlvyAmt("0");
|
||||
}
|
||||
|
||||
if(StringUtil.isEmpty(dlvyGroup.getExchngDlvyAmt2())) {
|
||||
dlvyGroup.setExchngDlvyAmt2("0");
|
||||
}
|
||||
//반품 배송비 왕복금액 적용여부 null 일 경우 N 처리
|
||||
if(StringUtil.isEmpty(dlvyGroup.getReturnDlvyApplcAt())) {
|
||||
dlvyGroup.setReturnDlvyApplcAt("N");
|
||||
}
|
||||
if(StringUtil.isEmpty(dlvyGroup.getReturnDlvyApplcAt2())) {
|
||||
dlvyGroup.setReturnDlvyApplcAt2("N");
|
||||
}
|
||||
|
||||
// 숫자(금액&갯수) , 제거
|
||||
// 숫자(금액&갯수) ',' 제거
|
||||
dlvyGroup.setDftDlvyAmt(StringUtil.removeCommaChar(dlvyGroup.getDftDlvyAmt()));
|
||||
dlvyGroup.setAmtCndAditAmt(StringUtil.removeCommaChar(dlvyGroup.getAmtCndAditAmt()));
|
||||
dlvyGroup.setCntCndAditAmt(StringUtil.removeCommaChar(dlvyGroup.getCntCndAditAmt()));
|
||||
@@ -421,6 +500,14 @@ public class SetupDlvygrpController {
|
||||
dlvyGroup.setReturnDlvyAmt(StringUtil.removeCommaChar(dlvyGroup.getReturnDlvyAmt()));
|
||||
dlvyGroup.setExchngDlvyAmt(StringUtil.removeCommaChar(dlvyGroup.getExchngDlvyAmt()));
|
||||
|
||||
dlvyGroup.setDftDlvyAmt2(StringUtil.removeCommaChar(dlvyGroup.getDftDlvyAmt2()));
|
||||
dlvyGroup.setAmtCndAditAmt2(StringUtil.removeCommaChar(dlvyGroup.getAmtCndAditAmt2()));
|
||||
dlvyGroup.setCntCndAditAmt2(StringUtil.removeCommaChar(dlvyGroup.getCntCndAditAmt2()));
|
||||
dlvyGroup.setAreaAditDlvyAmt2(StringUtil.removeCommaChar(dlvyGroup.getAreaAditDlvyAmt2()));
|
||||
dlvyGroup.setBundleDlvyCndAmt2(StringUtil.removeCommaChar(dlvyGroup.getBundleDlvyCndAmt2()));
|
||||
dlvyGroup.setReturnDlvyAmt2(StringUtil.removeCommaChar(dlvyGroup.getReturnDlvyAmt2()));
|
||||
dlvyGroup.setExchngDlvyAmt2(StringUtil.removeCommaChar(dlvyGroup.getExchngDlvyAmt2()));
|
||||
|
||||
//배송그룹 등록처리 결과 메시지(JSON) 처리
|
||||
//사용자 정보 추출 및 적용
|
||||
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
|
||||
|
||||
@@ -126,6 +126,8 @@ public class CscController {
|
||||
private PaginationProperties paginationProperties;
|
||||
@Autowired
|
||||
private BOCmService boCmService;
|
||||
@Autowired
|
||||
private BOMaSopmalService boMaSopmalService;
|
||||
|
||||
/************************************************************
|
||||
고객센터 목록 폼
|
||||
@@ -1681,6 +1683,13 @@ public class CscController {
|
||||
regusrInfo.setRegusrDvCd("99");//비회원
|
||||
}
|
||||
|
||||
// 약관정보
|
||||
BOMaSopmalVO sopmalVO = new BOMaSopmalVO();
|
||||
sopmalVO.setStplatDvCd("11");
|
||||
sopmalVO.setSopmalCd(bbsctt.getSopmalCd());
|
||||
List<DataMap> clauseList = new ArrayList<>();
|
||||
clauseList = boMaSopmalService.selectBOClauseInformation(sopmalVO);
|
||||
|
||||
// 게시판 설정 정보
|
||||
BOBbsVO bbsVO = new BOBbsVO();
|
||||
// bbsVO에 쇼핑몰코드, 해당 게시판 set
|
||||
@@ -1736,6 +1745,7 @@ public class CscController {
|
||||
content.put("regusrInfo", regusrInfo);
|
||||
content.put("bbscttVO", bbsctt);
|
||||
content.put("itmList", itmList);
|
||||
content.put("clauseList", clauseList);
|
||||
content.put("bbsInfo", bbsInfo);
|
||||
content.put("qesitmList", qesitmList);
|
||||
content.put("rvwQesitmList", rvwQesitmList);
|
||||
|
||||
@@ -9,6 +9,8 @@ import com.wb.domainserver.domain.admin.store.sopmal.vo.BOMaSopmalVO;
|
||||
import com.wb.domainserver.domain.admin.sys.comncd.service.BOMaComncdService;
|
||||
import com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO;
|
||||
import com.wb.domainserver.domain.gcone.common.service.BOCommonService;
|
||||
import com.wb.domainserver.domain.gcone.goods.subsvc.service.BOSubsvcService;
|
||||
import com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO;
|
||||
import com.wb.domainserver.domain.gcone.mbr.mbr.service.BOMbrService;
|
||||
import com.wb.domainserver.domain.gcone.mbr.mbr.vo.BOMbrVO;
|
||||
import com.wb.domainserver.domain.gcone.ordr.ordr.service.BOOrdrService;
|
||||
@@ -20,15 +22,11 @@ import com.wb.domainserver.domain.gcone.setup.site.vo.BOPrevewVO;
|
||||
import com.wb.domainserver.domain.gcone.setup.site.vo.BOSiteVO;
|
||||
import com.wb.domainserver.domain.itrnt.str.service.BOItrntStrService;
|
||||
import com.wb.domainserver.domain.itrnt.str.vo.BOItrntStrVO;
|
||||
import com.wb.domainserver.domain.sample.vo.PrevewVO;
|
||||
import com.wb.domainserver.domain.sopmal.main.vo.BrandVO;
|
||||
import com.wb.domainserver.domain.sopmal.main.vo.MaSopmalVO;
|
||||
import com.wb.domainserver.domain.sopmal.main.vo.MainVO;
|
||||
import com.wb.domainserver.domain.sopmal.main.vo.StrVO;
|
||||
import com.wb.domainserver.domain.sopmal.mpage.ordr.vo.MyOrdrDlvyVO;
|
||||
import com.wb.domainserver.domain.sopmal.mpage.ordr.vo.MyRefundVO;
|
||||
import com.wb.domainserver.exception.WnbtRestException;
|
||||
import com.wb.domainserver.response.ApiResponse;
|
||||
import com.wb.domainserver.response.WnbtResponse;
|
||||
import com.wb.domainserver.response.WnbtResponseBody;
|
||||
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
|
||||
@@ -36,7 +34,9 @@ import com.wb.domainserver.security.authentication.AnonymousUser;
|
||||
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
|
||||
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
|
||||
import com.wb.domainserver.security.authorization.annotation.Policy;
|
||||
import com.wb.domainserver.util.communicate.*;
|
||||
import com.wb.domainserver.util.communicate.KakaoProperties;
|
||||
import com.wb.domainserver.util.communicate.MultiValueMapConverter;
|
||||
import com.wb.domainserver.util.communicate.SendToResrc;
|
||||
import com.wb.domainserver.util.dataaccess.DataMap;
|
||||
import com.wb.domainserver.util.util.Util;
|
||||
import jakarta.servlet.http.Cookie;
|
||||
@@ -45,14 +45,12 @@ import jakarta.servlet.http.HttpSession;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.ModelMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
||||
import java.math.BigInteger;
|
||||
@@ -99,6 +97,8 @@ public class MainController {
|
||||
private BOMaSopmalService boMaSopmalService;
|
||||
@Autowired
|
||||
private BOMbrService boMbrService;
|
||||
@Autowired
|
||||
private BOSubsvcService boSubsvcService;
|
||||
|
||||
@Policy(AuthPolicy.PUBLIC)
|
||||
@RequestMapping(value= {"/","/index", "/sopmal/index","/sopmal/main"})
|
||||
@@ -796,15 +796,51 @@ public class MainController {
|
||||
|
||||
/**
|
||||
* 구독서비스 폼 이동
|
||||
*
|
||||
* @return
|
||||
* @param model
|
||||
* @param request
|
||||
* @return String
|
||||
*/
|
||||
@Policy(AuthPolicy.PUBLIC)
|
||||
@RequestMapping(value = "/sopmal/main/selectSubscribeForm")
|
||||
public String selectSubscribeForm(HttpServletRequest request) {
|
||||
public String selectSubscribeForm(ModelMap model, HttpServletRequest request) {
|
||||
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
|
||||
DataMap content = new DataMap();
|
||||
|
||||
BOSubsvcVO subsvcVo = new BOSubsvcVO();
|
||||
subsvcVo.setSopmalCd(user.getSopmalCd());
|
||||
content.put("subsvcList", boSubsvcService.selectBOSubsvcList(subsvcVo));
|
||||
|
||||
BOMaSopmalVO sopmalVO = new BOMaSopmalVO();
|
||||
sopmalVO.setSopmalCd(user.getSopmalCd());
|
||||
content.put("sopmalInfo", boMaSopmalService.selectBOSopmalUpdtForm(sopmalVO));
|
||||
|
||||
model.addAttribute("resultMap", content);
|
||||
|
||||
return Util.getDeviceType(request) + "/main/SubscribeR";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 구독서비스 상세 조회
|
||||
* @param subsvcVO
|
||||
* @return ResponseEntity<WnbtResponse>
|
||||
*/
|
||||
@Policy(AuthPolicy.PUBLIC)
|
||||
@RequestMapping(value = "/sopmal/main/selectSubscribeDetail", produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
public ResponseEntity<?> selectSubscribeDetail(BOSubsvcVO subsvcVO) {
|
||||
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
|
||||
Map<String, Object> message = new HashMap<>();
|
||||
subsvcVO.setSopmalCd(user.getSopmalCd());
|
||||
|
||||
message.put("resultMap", boSubsvcService.selectBOSubsvcDetail(subsvcVO));
|
||||
|
||||
return ResponseEntity.ok(
|
||||
WnbtResponse.builder()
|
||||
.resBody(new WnbtResponseBody(message))
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 자담유 > 네가지약속 (모바일)
|
||||
*
|
||||
|
||||
@@ -19,6 +19,8 @@ public class DlvylcVO extends AbstractVO{
|
||||
/** 배송지설명내용 */
|
||||
@NotBlank(message = "배송지 설명")
|
||||
private String dlvylcDcCn;
|
||||
/**배송지역코드*/
|
||||
private String dlvylcAreaCd;
|
||||
/** 받는사람명 */
|
||||
@NotBlank(message = "받으시는 분")
|
||||
private String recpntNm;
|
||||
@@ -30,7 +32,7 @@ public class DlvylcVO extends AbstractVO{
|
||||
private String telnb;
|
||||
/** 우편번호 */
|
||||
@NotBlank(message = "우편번호")
|
||||
@Length(min=1, max=5)
|
||||
@Length(min=1, max=7)
|
||||
private String zip;
|
||||
/** 도로명,지번 구분 */
|
||||
private String adresDv;
|
||||
@@ -43,6 +45,10 @@ public class DlvylcVO extends AbstractVO{
|
||||
/** 상세주소 */
|
||||
@NotBlank(message = "상세주소")
|
||||
private String dtlAdres;
|
||||
/** 개인통관부호(개인통관번호) */
|
||||
private String cstmclerCd;
|
||||
/** 도도부현 코드(일본) */
|
||||
private String prefcd;
|
||||
/** 기본배송지여부 */
|
||||
private String dftDlvylcAt = "N";
|
||||
/** 최근배송지여부 */
|
||||
|
||||
@@ -155,6 +155,93 @@ public class MyOrdrController {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 마이 페이지 > MY쇼핑 > 구독서비스 주문/배송 > 구독서비스 목록 조회 화면 이동
|
||||
* @return SubsvcOrdrDlvyListRForm.jsp
|
||||
*/
|
||||
@Policy(AuthPolicy.RESTRICTED)
|
||||
@RequestMapping(value="/selectMbrSubsvcOrdrListInqireRForm")
|
||||
public String selectMbrSubsvcOrdrListInqireForm(HttpServletRequest request, ModelMap model, MyOrdrDlvyVO ordrDlvyVO, BOMbrVO vo) throws Exception {
|
||||
model.addAttribute("paramVO", new ObjectMapper().writeValueAsString(ordrDlvyVO));
|
||||
|
||||
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
|
||||
Map<String, Object> content = selectBOMpageInfoInqire(vo);
|
||||
model.addAttribute("mpageResultMap", content);
|
||||
|
||||
return Util.getDeviceType(request) + "/mpage/ordr/SubsvcOrdrDlvyListRForm";
|
||||
}
|
||||
|
||||
/**
|
||||
* 마이 페이지 > MY쇼핑 > 구독서비스 주문/배송 > 구독서비스 주문/배송 목록 조회
|
||||
* @param ordrDlvyVO
|
||||
* @return ResponseEntity<WnbtResponse>
|
||||
*/
|
||||
@Policy(AuthPolicy.RESTRICTED)
|
||||
@RequestMapping(value="/selectMbrSubsvcOrdrListInqireAjax")
|
||||
public String selectMbrSubsvcOrdrListInqireAjax(ModelMap model, BOOrdrDlvyVO ordrDlvyVO) {
|
||||
|
||||
Map<String, Object> content = selectBOMbrSubsvcOrdrListInqireAjax(ordrDlvyVO);
|
||||
model.addAttribute("data", content);
|
||||
return "sopmal/mpage/ordr/SubsvcOrdrDlvyListR";
|
||||
}
|
||||
|
||||
/**
|
||||
* 마이 페이지 > MY쇼핑 > 구독서비스 주문/배송조회 > 구독서비스 주문/배송 목록 조회 (스크롤)
|
||||
* @param ordrDlvyVO
|
||||
* @return ResponseEntity<WnbtResponse>
|
||||
*/
|
||||
@Policy(AuthPolicy.RESTRICTED)
|
||||
@RequestMapping(value="/selectMbrSubsvcOrdrListInqireScrollAjax", produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
public ResponseEntity<WnbtResponse> selectMbrSubsvcOrdrListInqireScrollAjax(ModelMap model, BOOrdrDlvyVO ordrDlvyVO) {
|
||||
|
||||
Map<String, Object> content = selectBOMbrSubsvcOrdrListInqireAjax(ordrDlvyVO);
|
||||
return ResponseEntity.ok(
|
||||
WnbtResponse.builder()
|
||||
.resBody(new WnbtResponseBody(content))
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 마이 페이지 > MY쇼핑 > 구독서비스 주문/배송조회 > 주문/배송 상세 조회 화면 이동
|
||||
* @return OrdrDtlR.jsp
|
||||
*/
|
||||
@Policy(AuthPolicy.RESTRICTED)
|
||||
@RequestMapping(value="/selectMbrSubsvcOrdrDtlInqire")
|
||||
public String selectMbrSubsvcOrdrDtlInqire(HttpServletRequest request, ModelMap model, BOOrdrDlvyVO ordrDlvyVO, BOMbrVO vo) throws Exception {
|
||||
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
|
||||
if ("01".equals(user.getSysDvCd())) {
|
||||
ordrDlvyVO.setSopmalCd(user.getSopmalCd());
|
||||
}
|
||||
Map<String, Object> message = boOrdrService.selectMbrOrdrDtlInqire(ordrDlvyVO);
|
||||
/**발급대상구분코드*/
|
||||
BOMaComncdVO bOMaComncdVO = new BOMaComncdVO();
|
||||
bOMaComncdVO.setGroupCd("ISSU_TRGET_DV");
|
||||
List<?> issuTrgetDv = bOMaComncdService.selectBOCommcdDetailList(bOMaComncdVO);
|
||||
|
||||
message.put("issuTrgetDv", issuTrgetDv);
|
||||
model.addAttribute("data", message);
|
||||
// responseHandler.handleResponse(
|
||||
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOMbrOrdrDtlInqire", ordrDlvyVO),
|
||||
// model,
|
||||
// "data"
|
||||
// );
|
||||
model.addAttribute("paramVO", new ObjectMapper().writeValueAsString(ordrDlvyVO));
|
||||
model.addAttribute("vo", ordrDlvyVO);
|
||||
|
||||
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
|
||||
Map<String, Object> content = selectBOMpageInfoInqire(vo);
|
||||
model.addAttribute("mpageResultMap", content);
|
||||
// responseHandler.handleResponse(
|
||||
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMpageInfoInqire", ordrDlvyVO),
|
||||
// model,
|
||||
// "mpageResultMap"
|
||||
// );
|
||||
|
||||
return Util.getDeviceType(request) + "/mpage/ordr/SubsvcOrdrDtlR";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 마이 페이지 > MY쇼핑 > 주문/배송조회 > 주문/배송 목록 조회
|
||||
* @param ordrDlvyVO
|
||||
@@ -1466,6 +1553,39 @@ public class MyOrdrController {
|
||||
return content;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 사용자 > 마이페이지 > 구독서비스 주문/배송 조회
|
||||
*/
|
||||
public Map<String, Object> selectBOMbrSubsvcOrdrListInqireAjax(BOOrdrDlvyVO ordrDlvyVO) {
|
||||
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
|
||||
if ("01".equals(user.getSysDvCd())) {
|
||||
ordrDlvyVO.setSopmalCd(user.getSopmalCd());
|
||||
}
|
||||
ordrDlvyVO.setMbrInnb(BigInteger.valueOf(user.getUserInnb()));
|
||||
ordrDlvyVO.setMbrDvCd(user.getMbrDvCd());
|
||||
|
||||
PaginationInfo paginationInfo = new PaginationInfo();
|
||||
paginationInfo.setCurrentPageNo(ordrDlvyVO.getPageIndex());
|
||||
paginationInfo.setRecordCountPerPage(ordrDlvyVO.getPageUnit());
|
||||
paginationInfo.setPageSize(paginationProperties.getPageSize());
|
||||
|
||||
ordrDlvyVO.setPaginationInfo(paginationInfo);
|
||||
ordrDlvyVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
|
||||
ordrDlvyVO.setLastIndex(paginationInfo.getLastRecordIndex());
|
||||
ordrDlvyVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
|
||||
ordrDlvyVO.setMbrInnb(BigInteger.valueOf(MemberJwtContextHolder.getMemberInfo().getUserInnb()));
|
||||
|
||||
List<DataMap> resultList = boOrdrService.selectMbrSubsvcOrdrListInqireAjax(ordrDlvyVO);
|
||||
|
||||
Map<String, Object> content = new HashMap<>();
|
||||
|
||||
content.put("resultList", resultList);
|
||||
content.put("paginationInfo", ordrDlvyVO.getPaginationInfo());
|
||||
|
||||
return content;
|
||||
}
|
||||
|
||||
/**
|
||||
* bo로직 관리자 > 주문 > 주문관리 > 전체 주문 조회 > 전체주문상세 조회 > 결제취소/환불신청 정보 조회
|
||||
*/
|
||||
|
||||
@@ -362,6 +362,7 @@ public class OrdrController {
|
||||
param.put("mbrDvCd", user.getMbrDvCd());
|
||||
param.put("mbrInnb", user.getUserInnb());
|
||||
}
|
||||
log.debug("CONselectSetleExpectAmt-param : {}", param);
|
||||
Map<String, Object> content = new HashMap<>();
|
||||
try {
|
||||
DataMap datamap = new DataMap();
|
||||
@@ -3008,6 +3009,13 @@ public class OrdrController {
|
||||
return content;
|
||||
}
|
||||
} else {
|
||||
// if (CollectionUtils.isEmpty(multiOrdrDlvylc)) {
|
||||
// log.info("배송지 정보를 찾을 수 없습니다.");
|
||||
// content.put("result","Y");
|
||||
// content.put("message", "배송지 정보를 찾을 수 없습니다.");
|
||||
// // throw new WnbtRestException("주문유형 정보를 찾을 수 없습니다.");
|
||||
// return content;
|
||||
// }
|
||||
if (CollectionUtils.isEmpty(shipping)) {
|
||||
log.info("배송지 정보를 찾을 수 없습니다.");
|
||||
content.put("result","Y");
|
||||
@@ -3044,6 +3052,70 @@ public class OrdrController {
|
||||
String[] receptMbtlnbArray = null; // 배송지 받는이 휴대폰번호
|
||||
|
||||
if ("01".equals(ordrTyCd) || "03".equals(ordrTyCd) || "06".equals(ordrTyCd)) { // 일반주문, 회원개인결제, 정기배송
|
||||
// if (!CollectionUtils.isEmpty(multiOrdrDlvylc)) {
|
||||
//
|
||||
// // 배송지 리스트
|
||||
// List<LinkedHashMap<String, Object>> dlvylcListMulti = (List<LinkedHashMap<String, Object>>) multiOrdrDlvylc.get("dlvylc");
|
||||
//
|
||||
// /** ----------------------------------------------- 배송지별 주문 상품 수량 검사 START ----------------------------------------------- */
|
||||
// content = checkDistributedQyMatchesOrder(goodsList, dlvylcListMulti);
|
||||
// if (!"0".equals(content.get("status"))) {
|
||||
// return content;
|
||||
// }
|
||||
// /** ----------------------------------------------- 배송지별 주문 상품 수량 검사 END ----------------------------------------------- */
|
||||
//
|
||||
// // 부정판매 체크를 위한 배송지 정렬
|
||||
// if (!CollectionUtils.isEmpty(dlvylcListMulti)) {
|
||||
//
|
||||
// boolean hasInvalidAddress = dlvylcListMulti.stream().anyMatch(map -> {
|
||||
// String dlvylcZip = StringUtil.isNullToString(map.get("dlvylcZip"));
|
||||
// String adresDvCd = StringUtil.isNullToString(map.get("dlvylcAdresDvCd"));
|
||||
// String dlvylcLnbAdres = StringUtil.isNullToString(map.get("dlvylcLnbAdres"));
|
||||
// String dlvylcRnmAdres = StringUtil.isNullToString(map.get("dlvylcRnmAdres"));
|
||||
// String adresDtl = StringUtil.isNullToString(map.get("dlvylcAdresDtl"));
|
||||
//
|
||||
// return StringUtil.isEmpty(dlvylcZip)
|
||||
// || StringUtil.isEmpty(adresDvCd)
|
||||
// || ("01".equals(adresDvCd) && StringUtil.isEmpty(dlvylcRnmAdres))
|
||||
// || ("02".equals(adresDvCd) && StringUtil.isEmpty(dlvylcLnbAdres))
|
||||
// || StringUtil.isEmpty(adresDtl);
|
||||
// });
|
||||
//
|
||||
// if (hasInvalidAddress) {
|
||||
// content.put("result","Y");
|
||||
// content.put("message", "배송지 정보를 찾을 수 없습니다. 다시 시도해 주세요.");
|
||||
// return content;
|
||||
// }
|
||||
//
|
||||
// List<String> adresList = dlvylcListMulti.stream()
|
||||
// .map(map -> {
|
||||
// String adresDvCd = StringUtil.isNullToString(map.get("dlvylcAdresDvCd"));
|
||||
// String adresDtl = StringUtil.isNullToString(map.get("dlvylcAdresDtl"));
|
||||
// String dlvylcLnbAdres = StringUtil.isNullToString(map.get("dlvylcLnbAdres"));
|
||||
// String dlvylcRnmAdres = StringUtil.isNullToString(map.get("dlvylcRnmAdres"));
|
||||
// String adresMulti;
|
||||
// if ("01".equals(adresDvCd)) {
|
||||
// adresMulti = dlvylcRnmAdres + " " + adresDtl;
|
||||
// } else {
|
||||
// adresMulti = dlvylcLnbAdres + " " + adresDtl;
|
||||
// }
|
||||
//
|
||||
// return adresMulti;
|
||||
// })
|
||||
// .collect(Collectors.toList());
|
||||
//
|
||||
// adresArray = adresList.toArray(new String[0]);
|
||||
//
|
||||
// List<String> receptMbtlnbList = dlvylcListMulti.stream()
|
||||
// .map(map -> {
|
||||
// return StringUtil.isNullToString(map.get("recpntMbtlnb"));
|
||||
// })
|
||||
// .collect(Collectors.toList());
|
||||
//
|
||||
// receptMbtlnbArray = receptMbtlnbList.toArray(new String[0]);
|
||||
//
|
||||
// }
|
||||
// }
|
||||
if (
|
||||
StringUtil.isEmpty((String) shipping.get("dlvylcZip")) ||
|
||||
StringUtil.isEmpty((String) shipping.get("dlvylcAdresDvCd")) ||
|
||||
|
||||
@@ -26,7 +26,8 @@ public enum PurchsValidCode {
|
||||
EVT_TRGET_AT("evtTrgetAt","GC25E03T24A014","이벤트 대상 상품 아님"),
|
||||
DPLCT_LMTT_COUPON("dplctLmttCoupon","GC25D03L24C015","이벤트 중복제한 쿠폰 존재"),
|
||||
PURCHS_TOTAL_AMT("setleAmt","GC25P03T24A016","주문 요청 총 결제금액과 계산된 총 결제금액 불일치"),
|
||||
USE_CASH_MLG_AT("useCashMlgAt","GC25U06C26M017","GC 머니 보유금액 초과 사용")
|
||||
USE_CASH_MLG_AT("useCashMlgAt","GC25U06C26M017","GC 머니 보유금액 초과 사용"),
|
||||
OPTN_EXPSR_AT("optnExpsrAt","GC25G06C26M018","판매 불가능한 상품 존재 - 변경된 상품옵션이 장바구니에 있음")
|
||||
|
||||
;
|
||||
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
package com.wb.domainserver.security.config;
|
||||
|
||||
import com.wb.domainserver.realm.RealmResolver;
|
||||
import com.wb.domainserver.realm.filter.RealmFilter;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.Ordered;
|
||||
|
||||
@Configuration
|
||||
public class RealmFilterConfig {
|
||||
|
||||
@Autowired
|
||||
RealmResolver realmResolver;
|
||||
|
||||
@Bean
|
||||
public FilterRegistrationBean<RealmFilter> realmFilter() {
|
||||
FilterRegistrationBean<RealmFilter> registrationBean = new FilterRegistrationBean<>();
|
||||
registrationBean.setFilter(new RealmFilter(realmResolver));
|
||||
registrationBean.addUrlPatterns("/*");
|
||||
registrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE);
|
||||
return registrationBean;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.wb.domainserver.security.config;
|
||||
|
||||
import com.wb.domainserver.common.prop.PropertyService;
|
||||
import com.wb.domainserver.domain.sopmal.oauth.service.CustomOAuth2UserService;
|
||||
import com.wb.domainserver.exception.response.CustomOauthFailureException;
|
||||
import com.wb.domainserver.realm.RealmResolver;
|
||||
@@ -23,6 +24,7 @@ import com.wb.domainserver.response.CustomAuthenticationSuccessHandler;
|
||||
import com.wb.domainserver.security.authentication.CustomAccessDeniedEntryPoint;
|
||||
import com.wb.domainserver.security.authentication.CustomAuthenticationEntryPoint;
|
||||
import com.wb.domainserver.security.authorization.WnbtAuthorizationManager;
|
||||
import com.wb.domainserver.security.filter.BatchFilter;
|
||||
import com.wb.domainserver.security.filter.CustomXssFilter;
|
||||
import com.wb.domainserver.security.filter.JwtAuthenticationFilter;
|
||||
import com.wb.domainserver.security.handler.CustomLogoutSuccessHandler;
|
||||
@@ -55,7 +57,7 @@ import java.util.stream.Collectors;
|
||||
|
||||
import static org.springframework.beans.factory.config.BeanDefinition.ROLE_INFRASTRUCTURE;
|
||||
|
||||
@EnableWebSecurity(debug = false)
|
||||
@EnableWebSecurity(debug = true)
|
||||
@Configuration
|
||||
//@EnableMethodSecurity
|
||||
public class ResourceServerConfig {
|
||||
@@ -113,7 +115,7 @@ public class ResourceServerConfig {
|
||||
OrRequestMatcher resourceMatchers = new OrRequestMatcher(resourcePath);
|
||||
|
||||
return http
|
||||
.securityMatcher("/sopmal/**", "/oauth2/**", "/login/oauth2/**","/file/*")
|
||||
.securityMatcher("/*", "/sopmal/**", "/oauth2/**", "/login/oauth2/**","/file/*") ///gcone/** #배치호출처리
|
||||
.headers((headers)->headers.frameOptions(HeadersConfigurer.FrameOptionsConfig::sameOrigin))
|
||||
.csrf(AbstractHttpConfigurer::disable)
|
||||
.authorizeHttpRequests(authorize ->
|
||||
@@ -205,6 +207,26 @@ public class ResourceServerConfig {
|
||||
.build();
|
||||
}
|
||||
|
||||
@Bean
|
||||
@Order(3)
|
||||
SecurityFilterChain batchSecurityFilterChain(HttpSecurity http, SecurityPathProperties securityProperties) throws Exception {
|
||||
|
||||
List<RequestMatcher> uriList = securityProperties.getBatch().getUri().stream()
|
||||
.map(AntPathRequestMatcher::new)
|
||||
.collect(Collectors.toList());
|
||||
OrRequestMatcher uri = new OrRequestMatcher(uriList);
|
||||
|
||||
return http
|
||||
.securityMatcher(uri)
|
||||
.headers((headers)->headers.frameOptions(HeadersConfigurer.FrameOptionsConfig::sameOrigin))
|
||||
.csrf(AbstractHttpConfigurer::disable)
|
||||
.addFilterBefore(new BatchFilter(securityProperties), RequestCacheAwareFilter.class) /*batch 호출된 주소 확인 후 주소가 아니면 제외*/
|
||||
.exceptionHandling(exceptions -> exceptions
|
||||
.accessDeniedHandler(accessDeniedEntryPoint)
|
||||
)
|
||||
.build();
|
||||
}
|
||||
|
||||
//
|
||||
// private String customBearerTokenResolver(HttpServletRequest request) {
|
||||
// String authorization = request.getHeader("Authorization");
|
||||
|
||||
@@ -19,6 +19,8 @@ public class SecurityPathProperties {
|
||||
private Solmal solmal;
|
||||
private Admin admin;
|
||||
private Common common;
|
||||
private Batch batch;
|
||||
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@@ -39,5 +41,12 @@ public class SecurityPathProperties {
|
||||
public static class Common {
|
||||
private List<String> resources;
|
||||
}
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public static class Batch {
|
||||
private List<String> accessip;
|
||||
private List<String> uri;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
package com.wb.domainserver.security.filter;
|
||||
|
||||
import com.wb.domainserver.common.prop.PropertyService;
|
||||
import com.wb.domainserver.exception.WnbtRestException;
|
||||
import com.wb.domainserver.security.config.SecurityPathProperties;
|
||||
import com.wb.domainserver.security.filter.wrapper.XssServletWrapper;
|
||||
import jakarta.servlet.*;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletRequestWrapper;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.util.ContentCachingResponseWrapper;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
|
||||
@Slf4j
|
||||
public class BatchFilter implements Filter {
|
||||
|
||||
SecurityPathProperties securityProperties;
|
||||
|
||||
public BatchFilter(SecurityPathProperties securityProperties) {
|
||||
this.securityProperties = securityProperties;
|
||||
}
|
||||
|
||||
/*
|
||||
* batch서버에서 호출 되었는지 확인하는 필터
|
||||
* */
|
||||
@Override
|
||||
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
|
||||
HttpServletRequest httpRequest = (HttpServletRequest) request;
|
||||
|
||||
String ip = httpRequest.getHeader("X-Forwarded-For");
|
||||
if (ip == null || ip.isEmpty()) {
|
||||
ip = httpRequest.getRemoteAddr();
|
||||
}
|
||||
// 여러 프록시를 거친 경우, 콤마로 구분된 여러 IP가 있을 수 있어 첫 번째 IP만 가져오거나 처리 필요 [4, 7].
|
||||
if (ip != null && ip.contains(",")) {
|
||||
ip = ip.split(",")[0];
|
||||
}
|
||||
|
||||
Object[] whiteIp = securityProperties.getBatch().getAccessip().toArray();
|
||||
|
||||
/* 대상 ip가 아닌경우 처리불가*/
|
||||
if(!Arrays.asList(whiteIp).contains(ip)){
|
||||
throw new IOException("접근이 허용되지 않은 IP입니다.");
|
||||
}
|
||||
|
||||
chain.doFilter(request, response);
|
||||
}
|
||||
}
|
||||
@@ -58,9 +58,9 @@ spring:
|
||||
gcone:
|
||||
hikari:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
jdbc-url: jdbc:mysql://172.31.16.11:3306/gcone?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=false&verifyServerCertificate=false
|
||||
username: winbit
|
||||
password: dnlsqlxm1!
|
||||
jdbc-url: jdbc:mysql://115.68.176.232:3306/sake?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=yes&verifyServerCertificate=false
|
||||
username: sakeone
|
||||
password: dnlfxjtm13@$
|
||||
minimumIdle: 1
|
||||
maximumPoolSize: 10
|
||||
idleTimeout: 30000 #30초
|
||||
@@ -70,9 +70,9 @@ spring:
|
||||
sure:
|
||||
hikari:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
jdbc-url: jdbc:mysql://172.31.17.11:3306/nutricore
|
||||
username: winbit
|
||||
password: dnlsqlxm1!
|
||||
jdbc-url: jdbc:mysql://115.68.176.232:3306/sake?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=yes&verifyServerCertificate=false
|
||||
username: sakeone
|
||||
password: dnlfxjtm13@$
|
||||
minimumIdle: 1
|
||||
maximumPoolSize: 10
|
||||
idleTimeout: 30000 #30초
|
||||
@@ -358,6 +358,8 @@ mngrfo:
|
||||
extensions:
|
||||
images: .gif,.jpg,.jpeg,.png
|
||||
cdnurl: http://dev.img.soju1sake1.com
|
||||
subsvc:
|
||||
dft-goods-optn-innb: 5
|
||||
|
||||
|
||||
secret:
|
||||
@@ -378,9 +380,9 @@ naverpay:
|
||||
real-url: https://pay.naver.com
|
||||
|
||||
mail:
|
||||
host: mail.soju1sake1.com
|
||||
host: mail.sake1jan.com
|
||||
port: 587
|
||||
username: custom@soju1sake1.com
|
||||
username: custom@sake1jan.com
|
||||
password: mail13@$
|
||||
connectiontimeout: 10000
|
||||
timeout: 10000
|
||||
|
||||
@@ -58,7 +58,7 @@ spring:
|
||||
gcone:
|
||||
hikari:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
jdbc-url: jdbc:mysql://sakedb01.sldb.iwinv.net:3306/sake?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=false&verifyServerCertificate=false
|
||||
jdbc-url: jdbc:mysql://115.68.176.232:3306/sake?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=yes&verifyServerCertificate=false
|
||||
username: sakeone
|
||||
password: dnlfxjtm13@$
|
||||
minimumIdle: 1
|
||||
@@ -70,7 +70,7 @@ spring:
|
||||
sure:
|
||||
hikari:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
jdbc-url: jdbc:mysql://sakedb01.sldb.iwinv.net:3306/sake?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=false&verifyServerCertificate=false
|
||||
jdbc-url: jdbc:mysql://115.68.176.232:3306/sake?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=yes&verifyServerCertificate=false
|
||||
username: sakeone
|
||||
password: dnlfxjtm13@$
|
||||
minimumIdle: 1
|
||||
@@ -359,7 +359,8 @@ mngrfo:
|
||||
images: .gif,.jpg,.jpeg,.png
|
||||
cdnurl: https://19b0bde6dcdc15ad.kinxzone.com
|
||||
upurl: https://www.soju1sake1.com
|
||||
|
||||
subsvc:
|
||||
dft-goods-optn-innb: 5
|
||||
|
||||
secret:
|
||||
key: 1df5be2f7e90ae36
|
||||
@@ -379,9 +380,9 @@ naverpay:
|
||||
real-url: https://pay.naver.com
|
||||
|
||||
mail:
|
||||
host: mail.soju1sake1.com
|
||||
host: mail.sake1jan.com
|
||||
port: 587
|
||||
username: custom@soju1sake1.com
|
||||
username: custom@sake1jan.com
|
||||
password: mail13@$
|
||||
connectiontimeout: 10000
|
||||
timeout: 10000
|
||||
|
||||
@@ -58,7 +58,7 @@ spring:
|
||||
gcone:
|
||||
hikari:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
jdbc-url: jdbc:mysql://sakedb01.sldb.iwinv.net:3306/sake?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=false&verifyServerCertificate=false
|
||||
jdbc-url: jdbc:mysql://10.2.1.101:3306/sake?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=yes&verifyServerCertificate=false
|
||||
username: sakeone
|
||||
password: dnlfxjtm13@$
|
||||
minimumIdle: 10
|
||||
@@ -70,7 +70,7 @@ spring:
|
||||
sure:
|
||||
hikari:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
jdbc-url: jdbc:mysql://sakedb01.sldb.iwinv.net:3306/sake?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=false&verifyServerCertificate=false
|
||||
jdbc-url: jdbc:mysql://10.2.1.101:3306/sake?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=yes&verifyServerCertificate=false
|
||||
username: sakeone
|
||||
password: dnlfxjtm13@$
|
||||
minimumIdle: 1
|
||||
@@ -358,6 +358,8 @@ mngrfo:
|
||||
extensions:
|
||||
images: .gif,.jpg,.jpeg,.png
|
||||
cdnurl: https://19b0bde6dcdc15ad.kinxzone.com
|
||||
subsvc:
|
||||
dft-goods-optn-innb: 5
|
||||
|
||||
|
||||
secret:
|
||||
@@ -378,9 +380,9 @@ naverpay:
|
||||
real-url: https://pay.naver.com
|
||||
|
||||
mail:
|
||||
host: mail.soju1sake1.com
|
||||
host: 10.2.1.76
|
||||
port: 587
|
||||
username: custom@soju1sake1.com
|
||||
username: custom@sake1jan.com
|
||||
password: mail13@$
|
||||
connectiontimeout: 10000
|
||||
timeout: 10000
|
||||
|
||||
@@ -428,6 +428,7 @@
|
||||
END
|
||||
END AS EVT_TRGET_AT -- 이벤트 진행여부 이벤트 대상일경우 1을 반환함 = 정상 처리 0 이벤트 대상 아닐경우 1
|
||||
, IFNULL(EVT_DUPL_COUPON.DPLCT_LMTT_COUPON, 0) AS DPLCT_LMTT_COUPON -- 이벤트 중복제한 쿠폰 존재여부
|
||||
, CASE WHEN OPTN.OPTN_EXPSR_AT = 'Y' THEN 0 ELSE 1 END AS OPTN_EXPSR_AT
|
||||
FROM (SELECT GG.GOODS_INNB -- 상품 고유번호
|
||||
, GG.SOPMAL_CD -- 쇼핑몰코드
|
||||
, GG.DLVY_GROUP_INNB -- 배송그룹고유번호
|
||||
@@ -750,6 +751,7 @@
|
||||
, EVT.DSCNT_BNEF_DV_CD
|
||||
, OPTN.COMPNB_DSCNT_AT
|
||||
, OPTN.SCTN_DSCNT_AT
|
||||
, OPTN.OPTN_EXPSR_AT
|
||||
</select>
|
||||
|
||||
<!--주문 전 쿠폰번호 재확인-->
|
||||
|
||||
@@ -164,6 +164,8 @@
|
||||
ORDR_CANCL_ATMC_PROCS_PD,
|
||||
ORDR_PURCHSR_DCSN_AT,
|
||||
ORDR_ATMC_PURCHS_DCSN_PD,
|
||||
BUY_RATE,
|
||||
SELL_RATE,
|
||||
FORMAT(MLG_HOLD_USE_AMT, 0) AS MLG_HOLD_USE_AMT,
|
||||
FORMAT(MLG_SETLE_AMT_USE_AMT, 0) AS MLG_SETLE_AMT_USE_AMT,
|
||||
FORMAT(MLG_MUMM_USE_AMT, 0) AS MLG_MUMM_USE_AMT,
|
||||
@@ -192,6 +194,7 @@
|
||||
JOIN_GUIDANCE_WORDS,
|
||||
JOIN_BNEF,
|
||||
JOIN_COMPT_WORDS,
|
||||
SUBSVC_GUIDANCE_WORDS,
|
||||
TOP_SYS_FIL_NM,
|
||||
META_DC,
|
||||
META_KWRD,
|
||||
@@ -511,6 +514,8 @@
|
||||
ORDR_CANCL_ATMC_PROCS_PD,
|
||||
ORDR_PURCHSR_DCSN_AT,
|
||||
ORDR_ATMC_PURCHS_DCSN_PD,
|
||||
BUY_RATE,
|
||||
SELL_RATE,
|
||||
MLG_HOLD_USE_AMT,
|
||||
MLG_SETLE_AMT_USE_AMT,
|
||||
MLG_MUMM_USE_AMT,
|
||||
@@ -543,6 +548,7 @@
|
||||
JOIN_GUIDANCE_WORDS,
|
||||
JOIN_BNEF,
|
||||
JOIN_COMPT_WORDS,
|
||||
SUBSVC_GUIDANCE_WORDS,
|
||||
REGUSR,
|
||||
REGIST_DT,
|
||||
UPDUSR,
|
||||
@@ -577,6 +583,8 @@
|
||||
#{ordrCanclAtmcProcsPd },
|
||||
#{ordrPurchsrDcsnAt },
|
||||
#{ordrAtmcPurchsDcsnPd },
|
||||
#{buyRate },
|
||||
#{sellRate },
|
||||
#{mlgHoldUseAmt },
|
||||
#{mlgSetleAmtUseAmt },
|
||||
#{mlgMummUseAmt },
|
||||
@@ -609,6 +617,7 @@
|
||||
#{joinGuidanceWords},
|
||||
#{joinBnef},
|
||||
#{joinComptWords},
|
||||
#{subsvcGuidanceWords},
|
||||
#{regusr},
|
||||
SYSDATE(),
|
||||
#{regusr},
|
||||
@@ -889,6 +898,8 @@
|
||||
ORDR_ATMC_PURCHS_DCSN_PD = 0,
|
||||
</otherwise>
|
||||
</choose>
|
||||
BUY_RATE = #{buyRate},
|
||||
SELL_RATE = #{sellRate},
|
||||
MLG_HOLD_USE_AMT = #{mlgHoldUseAmt},
|
||||
MLG_SETLE_AMT_USE_AMT = #{mlgSetleAmtUseAmt},
|
||||
MLG_MUMM_USE_AMT = #{mlgMummUseAmt},
|
||||
@@ -918,6 +929,7 @@
|
||||
JOIN_GUIDANCE_WORDS = #{joinGuidanceWords},
|
||||
JOIN_BNEF = #{joinBnef},
|
||||
JOIN_COMPT_WORDS = #{joinComptWords},
|
||||
SUBSVC_GUIDANCE_WORDS = #{subsvcGuidanceWords},
|
||||
UPDUSR = #{updusr},
|
||||
UPDT_DT = SYSDATE(),
|
||||
META_DC = #{metaDc},
|
||||
|
||||
@@ -343,6 +343,8 @@
|
||||
, CAST(@ROWNUM:=@ROWNUM + 1 AS UNSIGNED) AS RNUM
|
||||
FROM (
|
||||
SELECT FG.GOODS_INNB
|
||||
, FGO.GOODS_OPTN_INNB
|
||||
, FGO.OPTN_TY
|
||||
, FG.DLVY_GROUP_INNB
|
||||
, FG.SOPMAL_CD
|
||||
, FG.GOODS_NM
|
||||
@@ -378,6 +380,7 @@
|
||||
, FGO.CNSMRPRIC
|
||||
, FGO.SLEPRIC
|
||||
, FGO.SOPMAL_CD
|
||||
, FGO.OPTN_TY
|
||||
FROM GC_GOODS_OPTION FGO
|
||||
WHERE FGO.OPTN_EXPSR_AT = 'Y'
|
||||
AND FGO.STDR_DV_AT = 'Y'
|
||||
|
||||
@@ -1269,7 +1269,9 @@ FROM (
|
||||
, FDA.RECPNT_NM
|
||||
, REGEXP_REPLACE(CAST(AES_DECRYPT(UNHEX(FDA.TELNB), '1df5be2f7e90ae36') AS CHAR(50)), '(.{2})(.{4})(.{4})', '$1-$2-$3') AS TELNB
|
||||
, REGEXP_REPLACE(CAST(AES_DECRYPT(UNHEX(FDA.MBTLNB), '1df5be2f7e90ae36') AS CHAR(50)), '(.{3})(.{4})(.{4})', '$1-$2-$3') AS MBTLNB
|
||||
, FDA.DLVYLC_AREA_CD
|
||||
, FDA.ZIP
|
||||
, FDA.PREFCD
|
||||
, FDA.ADRES_DV
|
||||
, FDA.RNM_ADRES
|
||||
, FDA.LNB_ADRES
|
||||
@@ -1573,6 +1575,15 @@ FROM (
|
||||
, ROUND(IFNULL(FSG.BUNDLE_DLVY_CND_AMT, 0), '0') AS BUNDLE_DLVY_CND_AMT
|
||||
, FSG.DLVY_AREA_ADIT_AT
|
||||
, ROUND(IFNULL(FSG.AREA_ADIT_DLVY_AMT, 0), '0') AS AREA_ADIT_DLVY_AMT
|
||||
, ROUND(IFNULL(FSG.DFT_DLVY_AMT2, 0), '0') AS DFT_DLVY_AMT2
|
||||
, FSG.AMT_CND_USE_AT2
|
||||
, ROUND(IFNULL(FSG.AMT_CND_ADIT_AMT2, 0), '0') AS AMT_CND_ADIT_AMT2
|
||||
, FSG.CNT_CND_USE_AT2
|
||||
, ROUND(IFNULL(FSG.CNT_CND_ADIT_AMT2, 0), '0') AS CNT_CND_ADIT_AMT2
|
||||
, FSG.BUNDLE_DLVY_USE_AT2
|
||||
, ROUND(IFNULL(FSG.BUNDLE_DLVY_CND_AMT2, 0), '0') AS BUNDLE_DLVY_CND_AMT2
|
||||
, FSG.DLVY_AREA_ADIT_AT2
|
||||
, ROUND(IFNULL(FSG.AREA_ADIT_DLVY_AMT2, 0), '0') AS AREA_ADIT_DLVY_AMT2
|
||||
FROM GC_SHIPPING_GROUPING FSG
|
||||
WHERE FSG.DLVY_GROUP_INNB = #{dlvyGroupInnb}
|
||||
AND FSG.SOPMAL_CD = #{sopmalCd}
|
||||
|
||||
@@ -0,0 +1,301 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.wb.domainserver.domain.gcone.goods.subsvc.mapper.BOSubsvcMapper">
|
||||
|
||||
<!-- 구독서비스 목록 조회 -->
|
||||
<select id="selectBOSubsvcList"
|
||||
parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO"
|
||||
resultType="dataMap">
|
||||
<![CDATA[
|
||||
SELECT GS.SUBSVC_INNB
|
||||
, SUBSVC_STTUS_CD
|
||||
, CONCAT(GS.SUBSVC_NM, ' (', GS.SUBSVC_GNR_NM, ')') AS SUBSVC_CONCAT_NM
|
||||
FROM GC_SUBSVC GS
|
||||
WHERE GS.SOPMAL_CD = 'SK'
|
||||
AND GS.SUBSVC_STTUS_CD != '03'
|
||||
AND GS.EXPSR_DV_CD IN ('01','03')
|
||||
AND
|
||||
CASE
|
||||
WHEN EXPSR_DV_CD = '03'
|
||||
THEN NOW() BETWEEN GS.EXPSR_BGN_DT AND GS.EXPSR_END_DT
|
||||
ELSE 1=1
|
||||
END
|
||||
]]>
|
||||
</select>
|
||||
|
||||
<!-- 구독서비스 상세 조회 -->
|
||||
<select id="selectBOSubsvcDetail"
|
||||
parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO"
|
||||
resultType="dataMap">
|
||||
<![CDATA[
|
||||
SELECT GS.SUBSVC_INNB
|
||||
, GS.SOPMAL_CD
|
||||
, GS.SUBSVC_NM
|
||||
, GS.SUB_PD /*구독기간*/
|
||||
, GS.SUBSVC_GNR /*기수*/
|
||||
, (SELECT MAX(A.SUBSVC_GNR) + 1 FROM GC_SUBSVC A WHERE A.SOPMAL_CD = GS.SOPMAL_CD AND A.SUBSVC_NM = GS.SUBSVC_NM) AS SUBSVC_NEXT_GNR /*다음기수*/
|
||||
, GS.SUBSVC_GNR_NM /*기수명*/
|
||||
, CONCAT(GS.SUBSVC_NM, ' (', GS.SUBSVC_GNR_NM, ')') AS SUBSVC_CONCAT_NM
|
||||
, GS.DLVY_CNT /*배송횟수*/
|
||||
, GS.DLVY_CYCLE /*배송주기*/
|
||||
, GS.SUBSVC_CT /*구독료*/
|
||||
, GS.TME_DLVY_AMT /*1회배송비*/
|
||||
, GS.CNSMRPRIC /*소비자가*/
|
||||
, GS.SUBSVC_CT + (TME_DLVY_AMT * DLVY_CNT) as SELPRIC /*실판매가=구독료+(1회배송비X배송횟수)*/
|
||||
, ROUND((GS.CNSMRPRIC - (GS.SUBSVC_CT + (TME_DLVY_AMT * DLVY_CNT))) / NULLIF(GS.CNSMRPRIC, 0) * 100, 0) AS DSCNT_RAITO
|
||||
, GS.INVNTRY_QY /*재고수량*/
|
||||
, GS.USEFUL_INVNTRY_QY /*판매재고수량*/
|
||||
, GS.INVNTRY_QY - GS.USEFUL_INVNTRY_QY AS AVAIL_QT /*가용제고*/
|
||||
, GS.SUBSVC_STTUS_CD /*상태코드*/
|
||||
, FN_GET_COMMCODE_NAME('GOODS_STTUS', GS.SUBSVC_STTUS_CD) AS SUBSVC_STTUS
|
||||
, FN_GET_COMMCODE_NAME('EXPSR_DV', GS.EXPSR_DV_CD) AS EXPSR_DV
|
||||
, GS.EXPSR_DV_CD /*노출구분코드*/
|
||||
, GS.EXPSR_BGN_DT /*노출시작일시*/
|
||||
, GS.EXPSR_END_DT /*노출종료일시*/
|
||||
, GS.INVNTRY_POLICY_CD /*재고정책코드*/
|
||||
, GS.AVLINV_LMTT_QY /*가용재고제한수량*/
|
||||
, GS.SUBSVC_DC /*구독서비스 설명*/
|
||||
, GS.IMG /*섬네일 이미지*/
|
||||
, GS.MBL_SUBSVC_DC /*모바일 구독서비스 설명*/
|
||||
, GS.MBL_SUBSVC_DC_PC_SAME_AT /*모바일 구독서비스 설명 PC동일여부*/
|
||||
, GS.LAST_PROCS_ODR /*최종차수*/
|
||||
, GS.DFT_GOODS_OPTN_INNB /*기본상품옵션고유번호*/
|
||||
FROM GC_SUBSVC GS
|
||||
WHERE GS.SOPMAL_CD = #{sopmalCd}
|
||||
AND GS.SUBSVC_INNB = #{subsvcInnb}
|
||||
]]>
|
||||
</select>
|
||||
|
||||
<!-- 관리자 구독서비스 목록 조회 -->
|
||||
<select id="selectBOMngrSubsvcList" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO" resultType="dataMap">
|
||||
SELECT *
|
||||
FROM (
|
||||
SELECT TB.*
|
||||
, CAST(@ROWNUM:=@ROWNUM + 1 AS UNSIGNED) AS RNUM
|
||||
FROM (
|
||||
SELECT COUNT(*) OVER() AS TOT_CNT
|
||||
, GC.SUBSVC_INNB
|
||||
, GC.SOPMAL_CD
|
||||
, GC.SUBSVC_NM
|
||||
, GC.SUBSVC_GNR
|
||||
, GC.SUBSVC_GNR_NM
|
||||
, GC.DLVY_CNT
|
||||
, GC.INVNTRY_QY
|
||||
, GC.INVNTRY_QY - GC.USEFUL_INVNTRY_QY AS AVAIL_QT /*가용제고*/
|
||||
, GC.SUBSVC_STTUS_CD
|
||||
, FN_GET_COMMCODE_NAME('GOODS_STTUS', GC.SUBSVC_STTUS_CD) AS SUBSVC_STTUS /*구독서비스 상태*/
|
||||
, FN_GET_COMMCODE_NAME('EXPSR_DV', GC.EXPSR_DV_CD) AS EXPSR_DV /*노출구분*/
|
||||
, GC.SUBSVC_CT /*구독료*/
|
||||
, GC.TME_DLVY_AMT /*1회배송비*/
|
||||
, GC.CNSMRPRIC /*소비자가*/
|
||||
, GC.SUBSVC_CT + (TME_DLVY_AMT * DLVY_CNT) as SELPRIC /*실판매가=구독료+(1회배송비X배송횟수)*/
|
||||
, GC.IMG /*섬네일 이미지*/
|
||||
, GC.LAST_PROCS_ODR /*최종차수*/
|
||||
FROM GC_SUBSVC GC
|
||||
WHERE GC.USE_AT = 'Y'
|
||||
AND GC.SOPMAL_CD = #{sopmalCd}
|
||||
<if test="srchSelSubsvcNm != null and srchSelSubsvcNm != ''">
|
||||
AND GC.SUBSVC_NM = #{srchSelSubsvcNm} /*구독서비스 명*/
|
||||
</if>
|
||||
<if test="srchSelSubsvcGnr != null and srchSelSubsvcGnr != ''">
|
||||
AND GC.SUBSVC_GNR = #{srchSelSubsvcGnr} /*기수*/
|
||||
</if>
|
||||
<if test="srchSubsvcNm != null and srchSubsvcNm != ''">
|
||||
AND GC.SUBSVC_NM LIKE CONCAT('%',#{srchSubsvcNm},'%') /*구독서비스 명*/
|
||||
</if>
|
||||
<if test="srchSubsvcGnrNm != null and srchSubsvcGnrNm != ''">
|
||||
AND GC.SUBSVC_GNR_NM LIKE CONCAT('%',#{srchSubsvcGnrNm},'%') /*기수명*/
|
||||
</if>
|
||||
<choose>
|
||||
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchArrSubsvcSttusCd)">
|
||||
/*판매상태*/
|
||||
AND GC.SUBSVC_STTUS_CD IN
|
||||
<foreach collection="srchArrSubsvcSttusCd" item="subsvcSttusCd" open="(" close=")" separator=",">
|
||||
#{subsvcSttusCd}
|
||||
</foreach>
|
||||
</when>
|
||||
</choose>
|
||||
<if test="srchExpsrDvCd != null and srchExpsrDvCd != ''">
|
||||
AND GC.EXPSR_DV_CD = #{srchExpsrDvCd} /*노출여부*/
|
||||
</if>
|
||||
ORDER BY
|
||||
<choose>
|
||||
<when test="sortDv == 'subsvcGnrAsc'">
|
||||
GC.SUBSVC_NM ASC, SUBSVC_GNR ASC,
|
||||
</when>
|
||||
<otherwise>
|
||||
GC.SUBSVC_NM DESC, SUBSVC_GNR DESC,
|
||||
</otherwise>
|
||||
</choose>
|
||||
GC.SUBSVC_INNB ASC
|
||||
) TB
|
||||
WHERE (@ROWNUM:=0)=0
|
||||
) PV
|
||||
WHERE 1=1
|
||||
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
|
||||
</select>
|
||||
|
||||
<!-- 관리자 구독서비스 조회조건 구독서비스 -->
|
||||
<select id="selectBOMngrSrchSubsvcList" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO" resultType="dataMap">
|
||||
SELECT GC.SUBSVC_NM, MIN(GC.SUBSVC_INNB) SUBSVC_INNB
|
||||
FROM GC_SUBSVC GC
|
||||
WHERE GC.SOPMAL_CD = #{sopmalCd}
|
||||
AND GC.USE_AT = 'Y'
|
||||
GROUP BY GC.SUBSVC_NM
|
||||
ORDER BY SUBSVC_INNB ASC
|
||||
</select>
|
||||
|
||||
<!-- 관리자 구독서비스 조회조건 구독서비스별 기수 -->
|
||||
<select id="selectBOMngrSrchSubsvcGnrList" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO" resultType="dataMap">
|
||||
<![CDATA[
|
||||
SELECT GC.SUBSVC_GNR, CONCAT(GC.SUBSVC_GNR , '기 (', GC.SUBSVC_GNR_NM, ')') SUBSVC_GNR_NM
|
||||
FROM GC_SUBSVC GC
|
||||
WHERE GC.SUBSVC_NM = #{srchSelSubsvcNm}
|
||||
AND GC.SOPMAL_CD = #{sopmalCd}
|
||||
AND GC.USE_AT = 'Y'
|
||||
GROUP BY GC.SUBSVC_GNR, GC.SUBSVC_GNR_NM
|
||||
ORDER BY GC.SUBSVC_GNR ASC
|
||||
]]>
|
||||
</select>
|
||||
<!--선택된 구독서비스 삭제(사용여부N처리)-->
|
||||
<update id="deleteBOMngrSubsvc" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO">
|
||||
UPDATE GC_SUBSVC
|
||||
SET USE_AT = 'N'
|
||||
,UPDUSR = #{updusr}
|
||||
,UPDT_DT = NOW()
|
||||
WHERE SOPMAL_CD = #{sopmalCd}
|
||||
<choose>
|
||||
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(arrSubsvcInnb)">
|
||||
AND SUBSVC_INNB IN
|
||||
<foreach collection="arrSubsvcInnb" item="subsvcInnb" open="(" separator="," close=")">
|
||||
#{subsvcInnb}
|
||||
</foreach>
|
||||
</when>
|
||||
<otherwise>
|
||||
AND 1=2
|
||||
</otherwise>
|
||||
</choose>
|
||||
</update>
|
||||
<!--선택된 구독서비스 수정-->
|
||||
<update id="updateBOMngrSubsvc" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO">
|
||||
UPDATE GC_SUBSVC
|
||||
SET SOPMAL_CD = #{sopmalCd}
|
||||
, SUBSVC_NM = #{subsvcNm}
|
||||
, SUB_PD = #{subPd}
|
||||
, SUBSVC_GNR_NM = #{subsvcGnrNm}
|
||||
, DLVY_CNT = REPLACE(#{dlvyCnt},',','')
|
||||
, DLVY_CYCLE = #{dlvyCycle}
|
||||
, SUBSVC_CT = REPLACE(#{subsvcCt},',','')
|
||||
, TME_DLVY_AMT = REPLACE(#{tmeDlvyAmt},',','')
|
||||
, CNSMRPRIC = REPLACE(#{cnsmrpric},',','')
|
||||
, INVNTRY_QY = REPLACE(#{invntryQy},',','')
|
||||
, INVNTRY_POLICY_CD = #{invntryPolicyCd}
|
||||
, AVLINV_LMTT_QY = #{avlinvLmttQy}
|
||||
, SUBSVC_STTUS_CD = #{subsvcSttusCd}
|
||||
, EXPSR_DV_CD = #{expsrDvCd}
|
||||
<choose>
|
||||
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(expsrBgnDt)">
|
||||
, EXPSR_BGN_DT = #{expsrBgnDt}
|
||||
</when>
|
||||
<otherwise>
|
||||
, EXPSR_BGN_DT = null
|
||||
</otherwise>
|
||||
</choose>
|
||||
<choose>
|
||||
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(expsrEndDt)">
|
||||
, EXPSR_END_DT = #{expsrEndDt}
|
||||
</when>
|
||||
<otherwise>
|
||||
, EXPSR_END_DT = null
|
||||
</otherwise>
|
||||
</choose>
|
||||
, SUBSVC_DC = #{subsvcDc}
|
||||
, MBL_SUBSVC_DC = #{mblSubsvcDc}
|
||||
, MBL_SUBSVC_DC_PC_SAME_AT = #{mblSubsvcDcPcSameAt}
|
||||
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(img)">
|
||||
, IMG = #{img}
|
||||
</if>
|
||||
, UPDUSR = #{updusr}
|
||||
, UPDT_DT = NOW()
|
||||
WHERE SUBSVC_INNB = #{subsvcInnb}
|
||||
</update>
|
||||
|
||||
<!-- 구독서비스 등록 -->
|
||||
<insert id="insertBOMngrSubsvc" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO" useGeneratedKeys="true" keyProperty="subsvcInnb" keyColumn="SUBSVC_INNB">
|
||||
INSERT INTO GC_SUBSVC (SOPMAL_CD
|
||||
, SUBSVC_NM
|
||||
, SUB_PD
|
||||
, SUBSVC_GNR
|
||||
, SUBSVC_GNR_NM
|
||||
, DLVY_CNT
|
||||
, DLVY_CYCLE
|
||||
, SUBSVC_CT
|
||||
, TME_DLVY_AMT
|
||||
, CNSMRPRIC
|
||||
, INVNTRY_QY
|
||||
, USEFUL_INVNTRY_QY
|
||||
, INVNTRY_POLICY_CD
|
||||
, AVLINV_LMTT_QY
|
||||
, SUBSVC_STTUS_CD
|
||||
, EXPSR_DV_CD
|
||||
, EXPSR_BGN_DT
|
||||
, EXPSR_END_DT
|
||||
, SUBSVC_DC
|
||||
, MBL_SUBSVC_DC
|
||||
, MBL_SUBSVC_DC_PC_SAME_AT
|
||||
, IMG
|
||||
, DFT_GOODS_OPTN_INNB
|
||||
, USE_AT
|
||||
, REGUSR
|
||||
, REGIST_DT)
|
||||
VALUES (#{sopmalCd}
|
||||
, #{subsvcNm}
|
||||
, #{subPd}
|
||||
, #{subsvcGnr}
|
||||
, #{subsvcGnrNm}
|
||||
, REPLACE(#{dlvyCnt},',','')
|
||||
, #{dlvyCycle}
|
||||
, REPLACE(#{subsvcCt},',','')
|
||||
, REPLACE(#{tmeDlvyAmt},',','')
|
||||
, REPLACE(#{cnsmrpric},',','')
|
||||
, REPLACE(#{invntryQy},',','')
|
||||
, 0
|
||||
, #{invntryPolicyCd}
|
||||
, #{avlinvLmttQy}
|
||||
, #{subsvcSttusCd}
|
||||
, #{expsrDvCd}
|
||||
<choose>
|
||||
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(expsrBgnDt)">
|
||||
, #{expsrBgnDt}
|
||||
</when>
|
||||
<otherwise>
|
||||
, null
|
||||
</otherwise>
|
||||
</choose>
|
||||
<choose>
|
||||
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(expsrEndDt)">
|
||||
, #{expsrEndDt}
|
||||
</when>
|
||||
<otherwise>
|
||||
, null
|
||||
</otherwise>
|
||||
</choose>
|
||||
, #{subsvcDc}
|
||||
, #{mblSubsvcDc}
|
||||
, #{mblSubsvcDcPcSameAt}
|
||||
, #{img}
|
||||
, #{dftGoodsOptnInnb}
|
||||
, 'Y'
|
||||
, #{regusr}
|
||||
, NOW()
|
||||
)
|
||||
</insert>
|
||||
|
||||
<!-- 구독서비스명 중복체크 -->
|
||||
<select id="selectBOMngrSubsvcNmDupCheck" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO" resultType="int">
|
||||
SELECT COUNT(*) CNT
|
||||
FROM GC_SUBSVC GS
|
||||
WHERE GS.SOPMAL_CD = #{sopmalCd}
|
||||
AND GS.SUBSVC_NM = #{subsvcNm}
|
||||
</select>
|
||||
</mapper>
|
||||
@@ -27,6 +27,7 @@
|
||||
AND OI.GOODS_INNB = G.GOODS_INNB
|
||||
INNER JOIN GC_ORDER O ON EX.SOPMAL_CD = O.SOPMAL_CD
|
||||
AND EX.ORDR_INNB = O.ORDR_INNB
|
||||
/*AND O.SUBSVC_AT = 'N'*/ /*구독서비스 제외*/
|
||||
INNER JOIN GC_ORDER_SHIPPING OSHIP ON EX.SOPMAL_CD = OSHIP.SOPMAL_CD
|
||||
AND EX.ORDR_INNB = OSHIP.ORDR_INNB
|
||||
AND EX.ORDR_DLVY_INNB = OSHIP.ORDR_DLVY_INNB
|
||||
@@ -405,6 +406,7 @@
|
||||
AND OI.GOODS_INNB = G.GOODS_INNB
|
||||
INNER JOIN GC_ORDER O ON SH.SOPMAL_CD = O.SOPMAL_CD
|
||||
AND SH.ORDR_INNB = O.ORDR_INNB
|
||||
/*AND O.SUBSVC_AT = 'N'*/ /*구독서비스 제외*/
|
||||
INNER JOIN GC_ORDER_SETLE ST ON SH.SOPMAL_CD = ST.SOPMAL_CD
|
||||
AND SH.ORDR_INNB = ST.ORDR_INNB
|
||||
LEFT JOIN GC_MEMBER MBR ON O.MBR_DV_CD = MBR.MBR_DV_CD
|
||||
@@ -583,8 +585,10 @@
|
||||
,SUM(OIOP.ORDR_QY) AS ORDR_QY -- 주문수량
|
||||
,COUNT(OIOP.ORDR_GOODS_OPTN_INNB) AS CNT
|
||||
,IFNULL(SUM(OIOP.STEP85), 0) AS SETLE_CANCEL_QY -- 취소수량
|
||||
,SUM(OIOP.STEP35 + OIOP.STEP45 + OIOP.STEP55 + OIOP.STEP65 + OIOP.STEP75) AS SNDNG_QY -- 보낸 수량
|
||||
,SUM((OIOP.ORDR_QY - OIOP.STEP85) - (OIOP.STEP35 + OIOP.STEP45 + OIOP.STEP55 + OIOP.STEP65 + OIOP.STEP75)) AS REMAIN_QY -- 남은 수량
|
||||
-- ,SUM(OIOP.STEP35 + OIOP.STEP45 + OIOP.STEP55 + OIOP.STEP65 + OIOP.STEP75) AS SNDNG_QY -- 보낸 수량
|
||||
-- ,SUM((OIOP.ORDR_QY - OIOP.STEP85) - (OIOP.STEP35 + OIOP.STEP45 + OIOP.STEP55 + OIOP.STEP65 + OIOP.STEP75)) AS REMAIN_QY -- 남은 수량
|
||||
,SUM(OIOP.STEP45 + OIOP.STEP55 + OIOP.STEP65 + OIOP.STEP75) AS SNDNG_QY -- 보낸 수량
|
||||
,SUM((OIOP.ORDR_QY - OIOP.STEP85) - (OIOP.STEP45 + OIOP.STEP55 + OIOP.STEP65 + OIOP.STEP75)) AS REMAIN_QY -- 남은 수량
|
||||
,CASE --
|
||||
WHEN COUNT(OIOP.ORDR_GOODS_OPTN_INNB) > 1 THEN CONCAT(MAX(OI.GOODS_NM) , ' 외 ', COUNT(OIOP.ORDR_GOODS_OPTN_INNB)-1, '종')
|
||||
ELSE MAX(OI.GOODS_NM)
|
||||
@@ -662,8 +666,10 @@
|
||||
,SUM(OIOP.ORDR_QY) AS ORDR_QY -- 주문수량
|
||||
,COUNT(OIOP.ORDR_GOODS_OPTN_INNB) AS CNT
|
||||
,IFNULL(SUM(OIOP.STEP85), 0) AS SETLE_CANCEL_QY -- 취소수량
|
||||
,SUM(OIOP.STEP35 + OIOP.STEP45 + OIOP.STEP55 + OIOP.STEP65 + OIOP.STEP75) AS SNDNG_QY -- 보낸 수량
|
||||
,SUM((OIOP.ORDR_QY - OIOP.STEP85) - (OIOP.STEP35 + OIOP.STEP45 + OIOP.STEP55 + OIOP.STEP65 + OIOP.STEP75)) AS REMAIN_QY -- 남은 수량
|
||||
-- ,SUM(OIOP.STEP35 + OIOP.STEP45 + OIOP.STEP55 + OIOP.STEP65 + OIOP.STEP75) AS SNDNG_QY -- 보낸 수량
|
||||
-- ,SUM((OIOP.ORDR_QY - OIOP.STEP85) - (OIOP.STEP35 + OIOP.STEP45 + OIOP.STEP55 + OIOP.STEP65 + OIOP.STEP75)) AS REMAIN_QY -- 남은 수량
|
||||
,SUM(OIOP.STEP45 + OIOP.STEP55 + OIOP.STEP65 + OIOP.STEP75) AS SNDNG_QY -- 보낸 수량
|
||||
,SUM((OIOP.ORDR_QY - OIOP.STEP85) - (OIOP.STEP45 + OIOP.STEP55 + OIOP.STEP65 + OIOP.STEP75)) AS REMAIN_QY -- 남은 수량
|
||||
,CASE --
|
||||
WHEN COUNT(OIOP.ORDR_GOODS_OPTN_INNB) > 1 THEN CONCAT(MAX(OI.GOODS_NM) , ' 외 ', COUNT(OIOP.ORDR_GOODS_OPTN_INNB)-1, '종')
|
||||
ELSE MAX(OI.GOODS_NM)
|
||||
@@ -755,7 +761,8 @@
|
||||
OIOP.ORDR_GOODS_OPTN_INNB
|
||||
,OIOP.SOPMAL_CD
|
||||
,OIOP.OPTN_TY
|
||||
,((OIOP.ORDR_QY - OIOP.STEP85) - (OIOP.STEP35 + OIOP.STEP45 + OIOP.STEP55 + OIOP.STEP65 + OIOP.STEP75)) AS QY
|
||||
-- ,((OIOP.ORDR_QY - OIOP.STEP85) - (OIOP.STEP35 + OIOP.STEP45 + OIOP.STEP55 + OIOP.STEP65 + OIOP.STEP75)) AS QY
|
||||
,((OIOP.ORDR_QY - OIOP.STEP85) - (OIOP.STEP45 + OIOP.STEP55 + OIOP.STEP65 + OIOP.STEP75)) AS QY /*상품준비(35)는 출고대상으로 지정*/
|
||||
,OI.GOODS_NM
|
||||
,(
|
||||
SELECT
|
||||
|
||||
@@ -79,14 +79,17 @@
|
||||
MBR_INNB,
|
||||
MBR_DV_CD,
|
||||
DLVYLC_DC_CN,
|
||||
DLVYLC_AREA_CD,
|
||||
RECPNT_NM,
|
||||
CAST(AES_DECRYPT(UNHEX(MBTLNB) , '1df5be2f7e90ae36') AS CHAR(50)) AS MBTLNB,
|
||||
ADRES_DV,
|
||||
LNB_ADRES,
|
||||
RNM_ADRES,
|
||||
DTL_ADRES,
|
||||
CSTMCLER_CD,
|
||||
DFT_DLVYLC_AT,
|
||||
ZIP
|
||||
ZIP,
|
||||
PREFCD
|
||||
<include refid="dlvyAdresFrom"/>
|
||||
<include refid="mbrInnbWhere"/>
|
||||
ORDER BY (CASE WHEN DFT_DLVYLC_AT = 'Y' THEN 1 ELSE 2 END), ADBK_INNB DESC
|
||||
@@ -179,12 +182,15 @@
|
||||
SELECT
|
||||
ADBK_INNB,
|
||||
MBR_INNB,
|
||||
DLVYLC_AREA_CD,
|
||||
RECPNT_NM,
|
||||
ZIP,
|
||||
PREFCD,
|
||||
DLVYLC_DC_CN,
|
||||
LNB_ADRES,
|
||||
RNM_ADRES,
|
||||
DTL_ADRES,
|
||||
CSTMCLER_CD,
|
||||
CAST(AES_DECRYPT(UNHEX(MBTLNB) , '1df5be2f7e90ae36') AS CHAR(50)) AS MBTLNB,
|
||||
DFT_DLVYLC_AT,
|
||||
REGIST_DT,
|
||||
@@ -222,14 +228,17 @@
|
||||
MBR_DV_CD,
|
||||
MBR_INNB,
|
||||
DLVYLC_DC_CN,
|
||||
DLVYLC_AREA_CD,
|
||||
RECPNT_NM,
|
||||
TELNB,
|
||||
MBTLNB,
|
||||
ZIP,
|
||||
PREFCD,
|
||||
ADRES_DV,
|
||||
LNB_ADRES,
|
||||
RNM_ADRES,
|
||||
DTL_ADRES,
|
||||
CSTMCLER_CD,
|
||||
DFT_DLVYLC_AT,
|
||||
RECENT_DLVYLC_AT,
|
||||
REGUSR,
|
||||
@@ -241,14 +250,17 @@
|
||||
#{mbrDvCd},
|
||||
#{mbrInnb},
|
||||
#{dlvylcDcCn},
|
||||
#{dlvylcAreaCd},
|
||||
#{recpntNm},
|
||||
#{telnb},
|
||||
HEX(AES_ENCRYPT(REPLACE(#{mbtlnb},'-',''), '1df5be2f7e90ae36')),
|
||||
#{zip},
|
||||
#{prefcd},
|
||||
#{adresDv},
|
||||
#{lnbAdres},
|
||||
#{rnmAdres},
|
||||
#{dtlAdres},
|
||||
#{cstmclerCd},
|
||||
#{dftDlvylcAt},
|
||||
#{recentDlvylcAt},
|
||||
#{regusr},
|
||||
@@ -264,13 +276,16 @@
|
||||
<![CDATA[
|
||||
UPDATE GC_DELIVERY_ADDRESS
|
||||
SET
|
||||
DLVYLC_AREA_CD= #{dlvylcAreaCd},
|
||||
RECPNT_NM = #{recpntNm},
|
||||
MBTLNB = HEX(AES_ENCRYPT(REPLACE(#{mbtlnb},'-',''), '1df5be2f7e90ae36')),
|
||||
ZIP = #{zip},
|
||||
PREFCD = #{prefcd},
|
||||
ADRES_DV = #{adresDv},
|
||||
RNM_ADRES = #{rnmAdres},
|
||||
LNB_ADRES = #{lnbAdres},
|
||||
DTL_ADRES = #{dtlAdres},
|
||||
CSTMCLER_CD = #{cstmclerCd},
|
||||
DFT_DLVYLC_AT = #{dftDlvylcAt},
|
||||
UPDUSR = #{updusr},
|
||||
UPDT_DT = SYSDATE(),
|
||||
@@ -482,6 +497,7 @@
|
||||
AND FOS.ORDR_INNB = FO.ORDR_INNB
|
||||
WHERE FO.USE_AT = 'Y'
|
||||
AND IFNULL(FOS.ORDR_INNB, '') != ''
|
||||
/*AND FO.SUBSVC_AT = 'N'*/
|
||||
AND FO.SOPMAL_CD = #{sopmalCd}
|
||||
<include refid="orderWhere"/>
|
||||
</select>
|
||||
@@ -585,6 +601,7 @@
|
||||
ON FOS.SOPMAL_CD = FO.SOPMAL_CD
|
||||
AND FOS.ORDR_INNB = FO.ORDR_INNB
|
||||
WHERE FO.USE_AT = 'Y'
|
||||
/*AND FO.SUBSVC_AT = 'N'*/
|
||||
AND FOS.ORDR_INNB IS NOT NULL -- GC_ORDER_SETLE 에 데이터가 있을 때 조건
|
||||
# AND IFNULL(FOS.ORDR_INNB, '') != '' -- 필터조건의 의미가 inner join 을 의미하므로, GC_ORDER_SETLE 테이블과 inner join 으로 변경하였음.
|
||||
AND FO.SOPMAL_CD = #{sopmalCd}
|
||||
@@ -2690,7 +2707,7 @@
|
||||
|
||||
<!-- 다운로드항목 등록 -->
|
||||
<insert id="insertDwldForm" parameterType="com.wb.domainserver.domain.gcone.ordr.ordr.vo.BODwldItmVO">
|
||||
<selectKey order="BEFORE" keyProperty="excelDwldFormSnb" resultType="java.lang.Long">
|
||||
<selectKey order="BEFORE" keyProperty="excelDwldFormSnb" resultType="java.lang.String">
|
||||
SELECT IFNULL(MAX(EXCEL_DWLD_FORM_SNB), 0) + 1 FROM GC_EXCEL_DWLD_FORM
|
||||
</selectKey>
|
||||
|
||||
@@ -3803,6 +3820,7 @@
|
||||
LEFT JOIN GC_ORDER_SETLE FOS ON FOS.SOPMAL_CD = FO.SOPMAL_CD
|
||||
AND FOS.ORDR_INNB = FO.ORDR_INNB
|
||||
WHERE FO.USE_AT = 'Y'
|
||||
AND FO.SUBSVC_AT = 'N' /*구독서비스 제외*/
|
||||
AND IFNULL(FOS.ORDR_INNB, '') != ''
|
||||
AND FO.SOPMAL_CD = #{sopmalCd}
|
||||
AND FO.MBR_DV_CD = #{mbrDvCd}
|
||||
@@ -3939,6 +3957,7 @@
|
||||
AND GOR.SOPMAL_CD = #{sopmalCd}
|
||||
AND GOR.MBR_DV_CD = #{mbrDvCd}
|
||||
AND GOR.MBR_INNB = #{mbrInnb}
|
||||
AND GOR.SUBSVC_INNB IS NULL /*구독서비스 제외*/
|
||||
)
|
||||
GROUP BY FOI.ORDR_INNB
|
||||
) ITEM ON ITEM.SOPMAL_CD = FO.SOPMAL_CD
|
||||
@@ -3946,6 +3965,7 @@
|
||||
LEFT JOIN GC_ORDER_SETLE FOS ON FOS.SOPMAL_CD = FO.SOPMAL_CD
|
||||
AND FOS.ORDR_INNB = FO.ORDR_INNB
|
||||
WHERE FO.USE_AT = 'Y'
|
||||
AND FO.SUBSVC_AT = 'N' /*구독서비스 제외*/
|
||||
AND ( ( FO.ORDR_STTUS_CD BETWEEN '15' AND '75' ) OR FO.ORDR_STTUS_CD = '95' )
|
||||
AND FO.SOPMAL_CD = #{sopmalCd}
|
||||
AND FO.MBR_DV_CD = #{mbrDvCd}
|
||||
@@ -4619,7 +4639,7 @@
|
||||
</select>
|
||||
|
||||
|
||||
<!-- 추가지역별배송비 해당 여부 -->
|
||||
<!-- 추가지역별배송비 해당 여부 (KR) -->
|
||||
<select id="selectBODefaultAdressAtInqire"
|
||||
resultType="java.lang.String">
|
||||
<![CDATA[
|
||||
@@ -4637,6 +4657,24 @@
|
||||
]]>
|
||||
</select>
|
||||
|
||||
<!-- 추가지역별배송비 해당 여부 (JP) -->
|
||||
<select id="selectBODefaultAdressAtInqire2"
|
||||
resultType="java.lang.String">
|
||||
<![CDATA[
|
||||
SELECT
|
||||
CASE
|
||||
WHEN EXISTS (
|
||||
SELECT 1
|
||||
FROM GC_DEFAULT_ADDSHIPPING
|
||||
WHERE SOPMAL_CD = #{sopmalCd}
|
||||
AND PREFCD = #{prefcd}
|
||||
) THEN 'Y'
|
||||
ELSE 'N'
|
||||
END AS ADDSHIPPING_AT
|
||||
FROM DUAL
|
||||
]]>
|
||||
</select>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -5247,6 +5285,163 @@
|
||||
]]>
|
||||
</select>
|
||||
|
||||
<!-- 사용자 > 마이페이지 > 구독서비스 주문/배송 목록 조회 -->
|
||||
<select id="selectMbrSubsvcOrdrList" parameterType="com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOOrdrDlvyVO" resultType="dataMap">
|
||||
<![CDATA[
|
||||
SELECT *
|
||||
FROM (
|
||||
SELECT CAST(@ROWNUM:=@ROWNUM + 1 AS UNSIGNED) AS RNUM
|
||||
, TB.*
|
||||
FROM (
|
||||
SELECT COUNT(*) OVER() TOT_CNT
|
||||
, FO.SOPMAL_CD
|
||||
, CAST(FO.ORDR_INNB AS CHAR) AS ORDR_INNB
|
||||
, FO.ORDR_RCEPT_DT
|
||||
, DATE_FORMAT(FO.ORDR_RCEPT_DT, '%Y.%m.%d') AS ORDR_DT
|
||||
, GS.IMG AS GOODS_IMAGE_URL
|
||||
, CONCAT(GS.SUBSVC_NM, '[', GS.SUBSVC_GNR_NM, ']') AS GOODS_NM
|
||||
, FN_GET_ORDER_GOODS_OPTN_NAME(FO.SOPMAL_CD, FO.ORDR_INNB, 0) AS OPTN_NM
|
||||
, GS.SUBSVC_INNB AS GOODS_INNB
|
||||
, ITEM.ORDR_DLVY_INNB
|
||||
, FO.RL_SETLE_AMT AS SETLE_AMT
|
||||
, FO.ORDR_STTUS_CD
|
||||
, CASE
|
||||
WHEN FO.ORDR_STTUS_CD = '95' THEN '주문취소'
|
||||
ELSE FN_GET_COMMCODE_NAME('ORDR_STTUS', FO.ORDR_STTUS_CD)
|
||||
END AS ORDR_STTUS_NM
|
||||
, (
|
||||
SELECT
|
||||
FN_GET_COMMCODE_NAME('GIFT_STTUS', SH.GIFT_STTUS_CD) AS GIFT_STTUS_CD
|
||||
FROM GC_ORDER_SHIPPING SH
|
||||
WHERE 1 =1
|
||||
AND SH.SOPMAL_CD = FO.SOPMAL_CD
|
||||
AND SH.ORDR_INNB = FO.ORDR_INNB
|
||||
LIMIT 1
|
||||
) AS GIFT_STTUS_CD_NM
|
||||
, (
|
||||
SELECT
|
||||
SH.GIFT_STTUS_CD
|
||||
FROM GC_ORDER_SHIPPING SH
|
||||
WHERE 1 =1
|
||||
AND SH.SOPMAL_CD = FO.SOPMAL_CD
|
||||
AND SH.ORDR_INNB = FO.ORDR_INNB
|
||||
LIMIT 1
|
||||
) AS GIFT_STTUS_CD
|
||||
, FO.ORDR_TY_CD
|
||||
, FO.SKN_ENVRN_CD
|
||||
, FN_GET_COMMCODE_NAME('ORDR_TY', FO.ORDR_TY_CD) AS ORDR_TY_CD_NM
|
||||
, FO.MBR_INNB
|
||||
, FO.MBR_DV_CD
|
||||
, CASE
|
||||
WHEN EXISTS (
|
||||
SELECT 1
|
||||
FROM GC_ORDER_ITEM_OPTION FOIO
|
||||
INNER JOIN GC_ORDER_ITEM FOI
|
||||
ON FOIO.SOPMAL_CD = FOI.SOPMAL_CD
|
||||
AND FOIO.ORDR_GOODS_INNB = FOI.ORDR_GOODS_INNB
|
||||
INNER JOIN GC_GOODS FG
|
||||
ON FOI.GOODS_INNB = FG.GOODS_INNB
|
||||
AND FOI.SOPMAL_CD = FG.SOPMAL_CD
|
||||
AND FG.GOODS_KND_CD = '01'
|
||||
LEFT JOIN LATERAL ( SELECT FBG.ORDR_GOODS_OPTN_INNB
|
||||
, FBG.SOPMAL_CD
|
||||
, SUM(CASE WHEN FB.BBS_ID = 'goods_review' THEN 1 ELSE 0 END) RVW_CNT
|
||||
, SUM(CASE WHEN FB.BBS_ID = 'goods_review_month' THEN 1 ELSE 0 END) MT_RVW_CNT
|
||||
FROM GC_BOARDDATA_GOODS FBG
|
||||
INNER JOIN GC_BOARDDATA FB
|
||||
ON FBG.BBSCTT_INNB = FB.BBSCTT_INNB
|
||||
AND FBG.SOPMAL_CD = FB.SOPMAL_CD
|
||||
AND FB.BBS_ID IN ('goods_review','goods_review_month')
|
||||
WHERE FOIO.ORDR_GOODS_OPTN_INNB = FBG.ORDR_GOODS_OPTN_INNB
|
||||
GROUP BY FBG.ORDR_GOODS_OPTN_INNB, FBG.SOPMAL_CD
|
||||
)RVW
|
||||
ON FOIO.ORDR_GOODS_OPTN_INNB = RVW.ORDR_GOODS_OPTN_INNB
|
||||
AND FOIO.SOPMAL_CD = RVW.SOPMAL_CD
|
||||
WHERE 1 = 1
|
||||
AND FOIO.SOPMAL_CD = FO.SOPMAL_CD
|
||||
AND FOI.ORDR_INNB = FO.ORDR_INNB
|
||||
AND FOIO.PURCHS_DCSN_QY > 0
|
||||
AND FOIO.OPTN_TY <> '04'
|
||||
AND ((FG.RVW_WRITNG_POSBL_AT = 'Y' AND (CASE WHEN IFNULL(FOIO.PURCHS_DCSN_QY,0) < IFNULL(FOIO.ORDR_QY,0) - IFNULL(STEP85,0) THEN IFNULL(FOIO.PURCHS_DCSN_QY,0)
|
||||
ELSE IFNULL(FOIO.ORDR_QY,0) - IFNULL(STEP85,0) END) > IFNULL(RVW.RVW_CNT,0) )
|
||||
OR (FG.MT_RVW_WRITNG_POSBL_AT = 'Y' AND IFNULL(MT_RVW_CNT,0) < 1))
|
||||
AND FOIO.PURCHS_DCSN_DT > DATE_SUB(SYSDATE(),INTERVAL 6 MONTH)
|
||||
) THEN 'Y'
|
||||
ELSE 'N'
|
||||
END AS REVIEW_AT
|
||||
, CASE
|
||||
WHEN EXISTS (
|
||||
SELECT
|
||||
1
|
||||
FROM GC_ORDER_ITEM_OPTION OIOP
|
||||
INNER JOIN GC_ORDER_SHIPPING SH ON OIOP.SOPMAL_CD = SH.SOPMAL_CD
|
||||
AND OIOP.ORDR_DLVY_INNB = SH.ORDR_DLVY_INNB
|
||||
WHERE 1 = 1
|
||||
AND OIOP.PURCHS_DCSN_AT = 'N'
|
||||
AND FO.SOPMAL_CD = SH.SOPMAL_CD
|
||||
AND FO.ORDR_INNB = SH.ORDR_INNB
|
||||
AND OIOP.ORDR_STTUS_CD BETWEEN '50' AND '75'
|
||||
) THEN 'Y'
|
||||
ELSE 'N'
|
||||
END AS PURCHS_DCSN_AT
|
||||
,FOS.SETLE_TY_CD
|
||||
FROM GC_ORDER FO
|
||||
INNER JOIN GC_SUBSVC GS ON FO.SUBSVC_INNB = GS.SUBSVC_INNB
|
||||
INNER JOIN (
|
||||
SELECT FOI.SOPMAL_CD
|
||||
, FOI.ORDR_INNB
|
||||
, MAX(FOI.GOODS_INNB) AS GOODS_INNB
|
||||
, MAX(FOIO.ORDR_DLVY_INNB) AS ORDR_DLVY_INNB
|
||||
, COUNT(DISTINCT FOI.ORDR_GOODS_INNB) AS CNT
|
||||
, SUM(FOIO.ORDR_QY) AS ORDR_QY
|
||||
, MAX(FN_GET_ORDER_INPUT_OPTN(FOI.SOPMAL_CD, FOI.ORDR_INNB, FOI.ORDR_GOODS_INNB, FOIO.ORDR_GOODS_OPTN_INNB)) AS INPUT_OPTN_TEXT
|
||||
, MAX(FOI.GOODS_IMG_COURS) AS GOODS_IMG_COURS
|
||||
FROM GC_ORDER_ITEM FOI
|
||||
INNER JOIN GC_ORDER_ITEM_OPTION FOIO ON FOI.SOPMAL_CD = FOIO.SOPMAL_CD
|
||||
AND FOI.ORDR_GOODS_INNB = FOIO.ORDR_GOODS_INNB
|
||||
WHERE FOI.SOPMAL_CD = #{sopmalCd}
|
||||
AND FOI.GOODS_KND_CD = '01'
|
||||
AND (FOI.SOPMAL_CD, FOI.ORDR_INNB) IN (
|
||||
SELECT GOR.SOPMAL_CD
|
||||
, GOR.ORDR_INNB
|
||||
FROM GC_ORDER GOR
|
||||
WHERE GOR.USE_AT = 'Y'
|
||||
AND GOR.SOPMAL_CD = #{sopmalCd}
|
||||
AND GOR.MBR_DV_CD = #{mbrDvCd}
|
||||
AND GOR.MBR_INNB = #{mbrInnb}
|
||||
AND GOR.SUBSVC_AT = 'Y' /*구독서비스*/
|
||||
)
|
||||
GROUP BY FOI.ORDR_INNB
|
||||
) ITEM ON ITEM.SOPMAL_CD = FO.SOPMAL_CD
|
||||
AND ITEM.ORDR_INNB = FO.ORDR_INNB
|
||||
LEFT JOIN GC_ORDER_SETLE FOS ON FOS.SOPMAL_CD = FO.SOPMAL_CD
|
||||
AND FOS.ORDR_INNB = FO.ORDR_INNB
|
||||
WHERE FO.USE_AT = 'Y'
|
||||
AND FO.SUBSVC_AT = 'Y' /*구독서비스*/
|
||||
AND ( ( FO.ORDR_STTUS_CD BETWEEN '15' AND '75' ) OR FO.ORDR_STTUS_CD = '95' )
|
||||
AND FO.SOPMAL_CD = #{sopmalCd}
|
||||
AND FO.MBR_DV_CD = #{mbrDvCd}
|
||||
AND FO.MBR_INNB = #{mbrInnb}
|
||||
ORDER BY FO.REGIST_DT DESC
|
||||
) TB
|
||||
WHERE (@rownum:=0) = 0
|
||||
]]>
|
||||
<include refid="mbrOrdrSubsvcListWhere"/>
|
||||
) PV
|
||||
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
|
||||
</select>
|
||||
|
||||
<sql id="mbrOrdrSubsvcListWhere">
|
||||
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchwrd)">
|
||||
AND (
|
||||
TB.ORDR_INNB LIKE CONCAT('%', #{srchwrd}, '%') OR
|
||||
TB.GOODS_NM LIKE CONCAT('%', #{srchwrd}, '%')
|
||||
)
|
||||
</if>
|
||||
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(bgnDt) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(endDt)">
|
||||
AND TB.ORDR_RCEPT_DT BETWEEN DATE(#{bgnDt}) AND DATE(#{endDt}) + 1
|
||||
</if>
|
||||
</sql>
|
||||
|
||||
</mapper>
|
||||
|
||||
|
||||
@@ -0,0 +1,470 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.wb.domainserver.domain.gcone.ordr.subsvc.mapper.BOSubsvcOrdrMapper">
|
||||
<!--구독서비스 상품준비 관리 목록-->
|
||||
<select id="selectBOSubsvcOrderList" parameterType="com.wb.domainserver.domain.gcone.ordr.subsvc.vo.BOSubsvcOrderVO" resultType="dataMap">
|
||||
SELECT *
|
||||
FROM (
|
||||
SELECT CAST(@ROWNUM:=@ROWNUM + 1 AS UNSIGNED) AS RNUM
|
||||
, COUNT(*) OVER() AS TOT_CNT
|
||||
, MAIN.*
|
||||
FROM (
|
||||
SELECT ROW_NUMBER() OVER(PARTITION BY GO.ORDR_INNB ORDER BY GO.ORDR_INNB ASC, GOIO.ORDR_STTUS_CD ASC, GOI.ORDR_GOODS_INNB ASC, GOIO.ORDR_GOODS_OPTN_INNB ASC) AS LINE
|
||||
, GO.ORDR_INNB
|
||||
, GOI.ORDR_GOODS_INNB
|
||||
, GOIO.ORDR_GOODS_OPTN_INNB /*일괄처리 대상 주문상품옵션고유번호*/
|
||||
, GOIO.ORDR_DLVY_INNB
|
||||
, GS.SUBSVC_NM
|
||||
, GS.SUBSVC_GNR
|
||||
, GS.SUBSVC_GNR_NM
|
||||
, GM.MBR_NM
|
||||
, GM.MBR_ID
|
||||
, GM.MBR_DV_CD
|
||||
, GM.MBR_INNB
|
||||
, fn_get_member_grad_name(GO.SOPMAL_CD, GM.MBR_DV_CD, GM.MBR_INNB) AS GRADE
|
||||
, SUM(CASE WHEN GOIO.ORDR_STTUS_CD BETWEEN '35' AND '75' THEN 1 ELSE 0 END) OVER(PARTITION BY GO.ORDR_INNB)+1 AS CURT_PROCS_ODR
|
||||
, SUM(CASE WHEN GOIO.ORDR_STTUS_CD BETWEEN '35' AND '75' THEN 1 ELSE 0 END) OVER(PARTITION BY GO.ORDR_INNB) AS MBR_LAST_PROCS_ODR /*회원별 최종차수 상품준비 ~ 배송완료*/
|
||||
, MAX(GOIO.UPDT_DT) OVER(PARTITION BY GO.ORDR_INNB) AS LAST_PRCS_DT/*최종처리일*/
|
||||
, IFNULL(GS.LAST_PROCS_ODR,0) AS LAST_PROCS_ODR /*최종차수*/
|
||||
, GOIO.ORDR_STTUS_CD
|
||||
FROM GC_ORDER GO
|
||||
JOIN GC_SUBSVC GS ON GS.SOPMAL_CD = GO.SOPMAL_CD AND GS.SUBSVC_INNB = GO.SUBSVC_INNB
|
||||
JOIN GC_MEMBER GM ON GM.MBR_DV_CD = GO.MBR_DV_CD AND GM.MBR_INNB = GO.MBR_INNB
|
||||
JOIN GC_ORDER_ITEM GOI ON GO.SOPMAL_CD =GOI.SOPMAL_CD AND GO.ORDR_INNB = GOI.ORDR_INNB
|
||||
JOIN GC_ORDER_ITEM_OPTION GOIO ON GOI.SOPMAL_CD = GOIO.SOPMAL_CD AND GOI.ORDR_GOODS_INNB = GOIO.ORDR_GOODS_INNB AND GOIO.OPTN_TY = '01'
|
||||
WHERE GO.USE_AT = 'Y'
|
||||
AND GO.SUBSVC_AT = 'Y'
|
||||
AND GO.SOPMAL_CD = #{sopmalCd}
|
||||
<if test='srchSelSubsvcNm != null and srchSelSubsvcNm != ""'>
|
||||
AND GS.SUBSVC_NM = #{srchSelSubsvcNm} /*구독서비스 명*/
|
||||
</if>
|
||||
<if test='srchSelSubsvcGnr != null and srchSelSubsvcGnr != ""'>
|
||||
AND GS.SUBSVC_GNR = #{srchSelSubsvcGnr} /*기수*/
|
||||
</if>
|
||||
<if test='srchSubsvcNm != null and srchSubsvcNm != ""'>
|
||||
AND GS.SUBSVC_NM LIKE CONCAT('%',#{srchSubsvcNm},'%') /*구독서비스 명*/
|
||||
</if>
|
||||
<if test='srchSubsvcGnrNm != null and srchSubsvcGnrNm != ""'>
|
||||
AND GS.SUBSVC_GNR_NM LIKE CONCAT('%',#{srchSubsvcGnrNm},'%') /*기수명*/
|
||||
</if>
|
||||
) MAIN
|
||||
WHERE (@ROWNUM:=0)=0
|
||||
AND MAIN.LINE = 1
|
||||
AND MAIN.ORDR_STTUS_CD = '25'
|
||||
<if test='srchCurMonExclude!= null and srchCurMonExclude == "Y"'>
|
||||
<![CDATA[
|
||||
AND MAIN.LAST_PRCS_DT < CONCAT(DATE_FORMAT(NOW(),'%Y-%m'),'-01') /*당월 처리자 제외*/
|
||||
]]>
|
||||
</if>
|
||||
<choose>
|
||||
<when test='sortDv == "subsvcGnrAsc"'>
|
||||
ORDER BY SUBSVC_NM ASC, SUBSVC_GNR ASC /*구독서비스명+기수*/
|
||||
</when>
|
||||
<when test='sortDv == "subsvcGnrDesc"'>
|
||||
ORDER BY SUBSVC_NM DESC, SUBSVC_GNR DESC /*구독서비스명+기수*/
|
||||
</when>
|
||||
<when test='sortDv == "mbrAsc"'>
|
||||
ORDER BY MBR_NM ASC, MBR_ID ASC /*주문자순*/
|
||||
</when>
|
||||
<when test='sortDv == "mbrDesc"'>
|
||||
ORDER BY MBR_NM DESC, MBR_ID DESC /*주문자순*/
|
||||
</when>
|
||||
<when test='sortDv == "ordrAsc"'>
|
||||
ORDER BY ORDR_INNB ASC /*주문번호순*/
|
||||
</when>
|
||||
<when test='sortDv == "ordrDesc"'>
|
||||
ORDER BY ORDR_INNB DESC /*주문번호순*/
|
||||
</when>
|
||||
<when test='sortDv == "lastPrcsDtAsc"'>
|
||||
ORDER BY LAST_PRCS_DT ASC /*최종처리일순*/
|
||||
</when>
|
||||
<when test='sortDv == "lastPrcsDtDesc"'>
|
||||
ORDER BY LAST_PRCS_DT ASC /*최종처리일순*/
|
||||
</when>
|
||||
<otherwise>
|
||||
ORDER BY SUBSVC_NM ASC, SUBSVC_GNR ASC
|
||||
</otherwise>
|
||||
</choose>
|
||||
) PV
|
||||
WHERE 1=1
|
||||
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
|
||||
|
||||
</select>
|
||||
|
||||
<!--구독서비스 상품준비 관리 목록 배송내역 팝업 배송내역목록-->
|
||||
<select id="selectBOSubsvcOrderDlvyList" parameterType="com.wb.domainserver.domain.gcone.ordr.subsvc.vo.BOSubsvcOrderVO" resultType="dataMap">
|
||||
SELECT CAST(@ROWNUM:=@ROWNUM + 1 AS UNSIGNED) AS RNUM
|
||||
, GOIO.ORDR_GOODS_OPTN_INNB
|
||||
, GO.ORDR_INNB
|
||||
, GM.MBR_NM
|
||||
, GM.MBR_ID
|
||||
, GM.MBR_DV_CD
|
||||
, GM.MBR_INNB
|
||||
, fn_get_member_grad_name(GO.SOPMAL_CD, GM.MBR_DV_CD, GM.MBR_INNB) AS GRADE
|
||||
, IFNULL(GOIO.UPDT_DT, GOIO.REGIST_DT) AS PROCS_DT /*발생일자*/
|
||||
, GOI.GOODS_IMG_COURS
|
||||
, GOI.GOODS_NM
|
||||
, GOIO.OPTN_NM_1
|
||||
, GOIO.OPTN_VAL_1
|
||||
, GOIO.CNSMRPRIC /*정가*/
|
||||
, GOIO.SLEPRIC /*판매가*/
|
||||
, fn_get_commcode_name('ORDR_STTUS', GOIO.ORDR_STTUS_CD) AS ORDR_STTUS
|
||||
FROM GC_ORDER GO
|
||||
JOIN GC_MEMBER GM ON GM.MBR_DV_CD = GO.MBR_DV_CD AND GM.MBR_INNB = GO.MBR_INNB
|
||||
JOIN GC_ORDER_ITEM GOI ON GOI.SOPMAL_CD = GO.SOPMAL_CD AND GOI.ORDR_INNB = GO.ORDR_INNB
|
||||
JOIN GC_ORDER_ITEM_OPTION GOIO ON GOI.SOPMAL_CD = GOIO.SOPMAL_CD AND GOI.ORDR_GOODS_INNB = GOIO.ORDR_GOODS_INNB AND GOIO.OPTN_TY = '01'
|
||||
WHERE (@ROWNUM:=0)=0
|
||||
AND GOI.ORDR_INNB = #{ordrInnb}
|
||||
AND GOI.SOPMAL_CD = #{sopmalCd}
|
||||
ORDER BY GOIO.ORDR_GOODS_OPTN_INNB ASC
|
||||
</select>
|
||||
<!--구독서비스 상품준비 관리 상품매칭 - 1. GC_ORDER update-->
|
||||
<update id="updateBOSubsvcGoodsMappgOrdr" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO">
|
||||
<foreach collection="arrOrdrInnb" item="ordrInnb" separator=";">
|
||||
UPDATE GC_ORDER
|
||||
SET ORDR_STTUS_CD = (CASE WHEN ORDR_STTUS_CD = '25' THEN '35' ELSE ORDR_STTUS_CD END)
|
||||
, UPDT_DT = NOW()
|
||||
WHERE SOPMAL_CD = #{sopmalCd}
|
||||
AND ORDR_INNB = #{ordrInnb}
|
||||
</foreach>
|
||||
</update>
|
||||
<!--구독서비스 상품준비 관리 상품매칭 - 2. GC_ORDER_ITEM update-->
|
||||
<update id="updateBOSubsvcGoodsMappgOrdrItem" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO">
|
||||
<foreach collection="arrOrdrGoodsInnb" item="ordrGoodsInnb" separator=";">
|
||||
UPDATE GC_ORDER_ITEM GOI, (SELECT GG.GOODS_INNB, GG.GOODS_NM, GGI.IMG
|
||||
FROM GC_GOODS GG
|
||||
JOIN GC_GOODS_IMAGE GGI ON GGI.SOPMAL_CD = GG.SOPMAL_CD AND GGI.GOODS_INNB = GG.GOODS_INNB AND GGI.CUT_NB = 1 AND GGI.IMG_KND = '02'
|
||||
WHERE GG.GOODS_INNB = #{goodsInnb}
|
||||
LIMIT 1) G
|
||||
SET GOI.GOODS_INNB = G.GOODS_INNB
|
||||
, GOI.GOODS_NM = G.GOODS_NM
|
||||
, GOI.GOODS_IMG_COURS = G.IMG
|
||||
WHERE SOPMAL_CD = #{sopmalCd}
|
||||
AND GOI.ORDR_GOODS_INNB = #{ordrGoodsInnb}
|
||||
</foreach>
|
||||
</update>
|
||||
<!--구독서비스 상품준비 관리 상품매칭 - 3. GC_ORDER_ITEM_OPTION update-->
|
||||
<update id="updateBOSubsvcGoodsMappgOrdrItemOptn" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO">
|
||||
<foreach collection="arrOrdrGoodsOptnInnb" item="ordrGoodsOptnInnb" separator=";">
|
||||
UPDATE GC_ORDER_ITEM_OPTION GOIO, (SELECT GOODS_OPTN_INNB
|
||||
, OPTN_TY
|
||||
, OPTN_NM_1
|
||||
, OPTN_NM_2
|
||||
, OPTN_NM_3
|
||||
, OPTN_NM_4
|
||||
, OPTN_VAL_1
|
||||
, OPTN_VAL_2
|
||||
, OPTN_VAL_3
|
||||
, OPTN_VAL_4
|
||||
, OPTN_CD_1
|
||||
, OPTN_CD_2
|
||||
, OPTN_CD_3
|
||||
, OPTN_CD_4
|
||||
, OPTN_INFO
|
||||
, CNSMRPRIC
|
||||
, SLEPRIC
|
||||
, GG.TAX_AT
|
||||
FROM GC_GOODS_OPTION GGO
|
||||
JOIN GC_GOODS GG ON GG.SOPMAL_CD = GGO.SOPMAL_CD AND GG.GOODS_INNB = GGO.GOODS_INNB
|
||||
WHERE GGO.GOODS_OPTN_INNB = #{goodsOptnInnb}
|
||||
AND GGO.OPTN_TY = #{optnTy}
|
||||
LIMIT 1) G
|
||||
SET GOIO.GOODS_OPTN_INNB = G.GOODS_OPTN_INNB
|
||||
, GOIO.OPTN_TY = G.OPTN_TY
|
||||
, GOIO.OPTN_NM_1 = G.OPTN_NM_1
|
||||
, GOIO.OPTN_NM_2 = G.OPTN_NM_2
|
||||
, GOIO.OPTN_NM_3 = G.OPTN_NM_3
|
||||
, GOIO.OPTN_NM_4 = G.OPTN_NM_4
|
||||
, GOIO.OPTN_VAL_1 = G.OPTN_VAL_1
|
||||
, GOIO.OPTN_VAL_2 = G.OPTN_VAL_2
|
||||
, GOIO.OPTN_VAL_3 = G.OPTN_VAL_3
|
||||
, GOIO.OPTN_VAL_4 = G.OPTN_VAL_4
|
||||
, GOIO.OPTN_CD_1 = G.OPTN_CD_1
|
||||
, GOIO.OPTN_CD_2 = G.OPTN_CD_2
|
||||
, GOIO.OPTN_CD_3 = G.OPTN_CD_3
|
||||
, GOIO.OPTN_CD_4 = G.OPTN_CD_4
|
||||
, GOIO.OPTN_INFO = G.OPTN_INFO
|
||||
, GOIO.CNSMRPRIC = G.CNSMRPRIC
|
||||
, GOIO.SLEPRIC = G.SLEPRIC
|
||||
, GOIO.TAX_AT = G.TAX_AT
|
||||
, GOIO.STEP85 = 0
|
||||
, GOIO.STEP35 = GOIO.ORDR_QY
|
||||
, GOIO.STEP45 = 0
|
||||
, GOIO.STEP55 = 0
|
||||
, GOIO.STEP65 = 0
|
||||
, GOIO.STEP75 = 0
|
||||
, GOIO.ORDR_STTUS_CD = '35'
|
||||
, GOIO.UPDT_DT = NOW()
|
||||
WHERE GOIO.SOPMAL_CD = #{sopmalCd}
|
||||
AND GOIO.ORDR_GOODS_OPTN_INNB = #{ordrGoodsOptnInnb}
|
||||
</foreach>
|
||||
</update>
|
||||
<!--구독서비스 상품준비 관리 상품매칭 - 4. GC_ORDER_SHIPPING update-->
|
||||
<update id="updateBOSubsvcGoodsMappgShipping" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO">
|
||||
<foreach collection="arrOrdrDlvyInnb" item="ordrDlvyInnb" separator=";">
|
||||
UPDATE GC_ORDER_SHIPPING
|
||||
SET ORDR_STTUS_CD = '35'
|
||||
, UPDT_DT = NOW()
|
||||
WHERE SOPMAL_CD = #{sopmalCd}
|
||||
AND ORDR_DLVY_INNB = #{ordrDlvyInnb}
|
||||
</foreach>
|
||||
</update>
|
||||
<!--구독서비스 상품준비 관리 상품매칭 - 5. GC_SUBSVC update-->
|
||||
<update id="updateBOSubsvcGoodsMappgSubsvc" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO">
|
||||
UPDATE GC_SUBSVC GS, ( SELECT SOPMAL_CD, SUBSVC_INNB, MAX(LAST_PROCS_ODR) LAST_PROCS_ODR
|
||||
FROM (
|
||||
SELECT GOIO.SOPMAL_CD, GO.SUBSVC_INNB, SUM(CASE WHEN GOIO.ORDR_STTUS_CD BETWEEN '35' AND '75' THEN 1 ELSE 0 END) OVER(PARTITION BY GO.SOPMAL_CD, GO.ORDR_INNB) AS LAST_PROCS_ODR
|
||||
FROM GC_ORDER GO
|
||||
JOIN GC_ORDER_ITEM GOI ON GOI.SOPMAL_CD = GO.SOPMAL_CD AND GOI.ORDR_INNB = GO.ORDR_INNB
|
||||
JOIN GC_ORDER_ITEM_OPTION GOIO ON GOIO.SOPMAL_CD = GOI.SOPMAL_CD AND GOI.ORDR_GOODS_INNB = GOIO.ORDR_GOODS_INNB
|
||||
WHERE GO.SUBSVC_AT = 'Y'
|
||||
AND GO.SOPMAL_CD = #{sopmalCd}
|
||||
AND GO.SUBSVC_INNB IN (SELECT DISTINCT SUBSVC_INNB
|
||||
FROM GC_ORDER
|
||||
WHERE SOPMAL_CD = #{sopmalCd}
|
||||
AND ORDR_INNB IN
|
||||
<foreach collection="arrOrdrInnb" item="ordrInnb" open="(" close=")" separator=",">
|
||||
#{ordrInnb}
|
||||
</foreach>
|
||||
)
|
||||
) M
|
||||
GROUP BY SOPMAL_CD, SUBSVC_INNB
|
||||
) MAIN
|
||||
SET GS.LAST_PROCS_ODR = MAIN.LAST_PROCS_ODR
|
||||
, UPDT_DT = NOW()
|
||||
WHERE GS.SOPMAL_CD = MAIN.SOPMAL_CD
|
||||
AND GS.SUBSVC_INNB = MAIN.SUBSVC_INNB
|
||||
</update>
|
||||
|
||||
<!--구독서비스 상품변경 관리 목록-->
|
||||
<select id="selectBOSubsvcOrderMappedList" parameterType="com.wb.domainserver.domain.gcone.ordr.subsvc.vo.BOSubsvcOrderVO" resultType="dataMap">
|
||||
SELECT *
|
||||
FROM (
|
||||
SELECT CAST(@ROWNUM:=@ROWNUM + 1 AS UNSIGNED) AS RNUM
|
||||
, COUNT(*) OVER() AS TOT_CNT
|
||||
, MAIN.*
|
||||
FROM (
|
||||
SELECT ROW_NUMBER() OVER(PARTITION BY GO.ORDR_INNB ORDER BY GOI.ORDR_GOODS_INNB ASC, GOIO.ORDR_GOODS_OPTN_INNB ASC) AS CURT_PROCS_ODR /*차수*/
|
||||
, GO.ORDR_INNB /*주문번호*/
|
||||
, GOI.ORDR_GOODS_INNB
|
||||
, GOIO.ORDR_GOODS_OPTN_INNB /*일괄처리 대상 주문상품옵션고유번호*/
|
||||
, GOIO.ORDR_DLVY_INNB
|
||||
, GS.SUBSVC_NM
|
||||
, GS.SUBSVC_GNR
|
||||
, GS.SUBSVC_GNR_NM
|
||||
, GM.MBR_NM /*회원명*/
|
||||
, GM.MBR_ID /*회원ID*/
|
||||
, GM.MBR_DV_CD /*회원구분코드*/
|
||||
, GM.MBR_INNB /*회원고유번호*/
|
||||
, fn_get_member_grad_name(GO.SOPMAL_CD, GM.MBR_DV_CD, GM.MBR_INNB) AS GRADE /*회원등급*/
|
||||
, MAX(GOIO.UPDT_DT) OVER(PARTITION BY GO.ORDR_INNB) AS LAST_PRCS_DT/*최종처리일*/
|
||||
, GOIO.ORDR_STTUS_CD
|
||||
, GOI.GOODS_IMG_COURS /*상품이미지*/
|
||||
, GOI.GOODS_NM /*상품명*/
|
||||
, GOIO.OPTN_NM_1 /*상품옵션명*/
|
||||
, GOIO.OPTN_VAL_1 /*상품옵션값*/
|
||||
, GOIO.UPDT_DT /*처리일자*/
|
||||
FROM GC_ORDER GO
|
||||
JOIN GC_SUBSVC GS ON GS.SOPMAL_CD = GO.SOPMAL_CD AND GS.SUBSVC_INNB = GO.SUBSVC_INNB
|
||||
JOIN GC_MEMBER GM ON GM.MBR_DV_CD = GO.MBR_DV_CD AND GM.MBR_INNB = GO.MBR_INNB
|
||||
JOIN GC_ORDER_ITEM GOI ON GO.SOPMAL_CD =GOI.SOPMAL_CD AND GO.ORDR_INNB = GOI.ORDR_INNB
|
||||
JOIN GC_ORDER_ITEM_OPTION GOIO ON GOI.SOPMAL_CD = GOIO.SOPMAL_CD AND GOI.ORDR_GOODS_INNB = GOIO.ORDR_GOODS_INNB AND GOIO.OPTN_TY = '01'
|
||||
WHERE GO.USE_AT = 'Y'
|
||||
AND GO.SUBSVC_AT = 'Y'
|
||||
AND GO.SOPMAL_CD = #{sopmalCd}
|
||||
<if test='srchSelSubsvcNm != null and srchSelSubsvcNm != ""'>
|
||||
AND GS.SUBSVC_NM = #{srchSelSubsvcNm} /*구독서비스 명*/
|
||||
</if>
|
||||
<if test='srchSelSubsvcGnr != null and srchSelSubsvcGnr != ""'>
|
||||
AND GS.SUBSVC_GNR = #{srchSelSubsvcGnr} /*기수*/
|
||||
</if>
|
||||
<if test='srchSubsvcNm != null and srchSubsvcNm != ""'>
|
||||
AND GS.SUBSVC_NM LIKE CONCAT('%',#{srchSubsvcNm},'%') /*구독서비스 명*/
|
||||
</if>
|
||||
<if test='srchSubsvcGnrNm != null and srchSubsvcGnrNm != ""'>
|
||||
AND GS.SUBSVC_GNR_NM LIKE CONCAT('%',#{srchSubsvcGnrNm},'%') /*기수명*/
|
||||
</if>
|
||||
<if test='srchOrdrInnb != null and srchOrdrInnb != ""'>
|
||||
AND GO.ORDR_INNB = #{srchOrdrInnb} /*주문번호*/
|
||||
</if>
|
||||
<if test='srchMbrNm != null and srchMbrNm != ""'>
|
||||
AND GM.MBR_NM LIKE CONCAT('%',#{srchMbrNm},'%') /*주문자명*/
|
||||
</if>
|
||||
<if test='srchMbrId != null and srchMbrId != ""'>
|
||||
AND GM.MBR_ID LIKE CONCAT('%',#{srchMbrId},'%') /*주문자id*/
|
||||
</if>
|
||||
) MAIN
|
||||
WHERE (@ROWNUM:=0)=0
|
||||
AND MAIN.ORDR_STTUS_CD = '35'
|
||||
<if test='srchCurMonExclude!= null and srchCurMonExclude == "Y"'>
|
||||
<![CDATA[
|
||||
AND MAIN.LAST_PRCS_DT < CONCAT(DATE_FORMAT(NOW(),'%Y-%m'),'-01') /*당월 처리자 제외*/
|
||||
]]>
|
||||
</if>
|
||||
<choose>
|
||||
<when test='sortDv == "subsvcGnrAsc"'>
|
||||
ORDER BY SUBSVC_NM ASC, SUBSVC_GNR ASC /*구독서비스명+기수*/
|
||||
</when>
|
||||
<when test='sortDv == "subsvcGnrDesc"'>
|
||||
ORDER BY SUBSVC_NM DESC, SUBSVC_GNR DESC /*구독서비스명+기수*/
|
||||
</when>
|
||||
<when test='sortDv == "mbrAsc"'>
|
||||
ORDER BY MBR_NM ASC, MBR_ID ASC /*주문자순*/
|
||||
</when>
|
||||
<when test='sortDv == "mbrDesc"'>
|
||||
ORDER BY MBR_NM DESC, MBR_ID DESC /*주문자순*/
|
||||
</when>
|
||||
<when test='sortDv == "ordrAsc"'>
|
||||
ORDER BY ORDR_INNB ASC /*주문번호순*/
|
||||
</when>
|
||||
<when test='sortDv == "ordrDesc"'>
|
||||
ORDER BY ORDR_INNB DESC /*주문번호순*/
|
||||
</when>
|
||||
<when test='sortDv == "lastPrcsDtAsc"'>
|
||||
ORDER BY UPDT_DT ASC /*처리일순*/
|
||||
</when>
|
||||
<when test='sortDv == "lastPrcsDtDesc"'>
|
||||
ORDER BY UPDT_DT ASC /*처리일순*/
|
||||
</when>
|
||||
<otherwise>
|
||||
ORDER BY SUBSVC_NM ASC, SUBSVC_GNR ASC
|
||||
</otherwise>
|
||||
</choose>
|
||||
) PV
|
||||
WHERE 1=1
|
||||
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
|
||||
</select>
|
||||
|
||||
|
||||
<!--구독서비스 구독자조회 목록-->
|
||||
<select id="selectBOSubsvcOrderMbrList" parameterType="com.wb.domainserver.domain.gcone.ordr.subsvc.vo.BOSubsvcOrderVO" resultType="dataMap">
|
||||
SELECT *
|
||||
FROM (
|
||||
SELECT CAST(@ROWNUM:=@ROWNUM + 1 AS UNSIGNED) AS RNUM
|
||||
, COUNT(*) OVER() AS TOT_CNT
|
||||
, MAIN.*
|
||||
FROM (
|
||||
WITH ORDR AS (SELECT COUNT(DISTINCT GO.ORDR_INNB) AS SUBSCRIBER_CNT
|
||||
, MAX(GOIO.UPDT_DT) AS LAST_PRCS_DT
|
||||
, GO.SOPMAL_CD
|
||||
, GO.SUBSVC_INNB
|
||||
FROM GC_ORDER GO
|
||||
JOIN GC_ORDER_ITEM GOI ON GOI.SOPMAL_CD = GO.SOPMAL_CD AND GOI.ORDR_INNB = GO.ORDR_INNB
|
||||
JOIN GC_ORDER_ITEM_OPTION GOIO ON GOIO.SOPMAL_CD = GOI.SOPMAL_CD AND GOIO.ORDR_GOODS_INNB AND GOI.ORDR_GOODS_INNB
|
||||
WHERE GO.SUBSVC_AT = 'Y'
|
||||
AND GO.USE_AT = 'Y'
|
||||
GROUP BY GO.SOPMAL_CD, GO.SUBSVC_INNB)
|
||||
SELECT GS.SUBSVC_INNB
|
||||
, GS.SUBSVC_NM /*구독서비스명*/
|
||||
, GS.SUBSVC_GNR /*구독서비스명 기수*/
|
||||
, GS.SUBSVC_GNR_NM /*구독서비스명 기수명*/
|
||||
, GS.SUBSVC_CT + (GS.TME_DLVY_AMT * GS.DLVY_CNT) as SELPRIC /*실판매가=구독료+(1회배송비X배송횟수)*/
|
||||
, GS.DLVY_CNT /*배송횟수*/
|
||||
, IFNULL(GS.LAST_PROCS_ODR, 0) AS LAST_PROCS_ODR /*최종차수*/
|
||||
, IFNULL(ORDR.SUBSCRIBER_CNT, 0) AS SUBSCRIBER_CNT /*구독자수*/
|
||||
, ORDR.LAST_PRCS_DT
|
||||
FROM GC_SUBSVC GS
|
||||
LEFT JOIN ORDR ON ORDR.SOPMAL_CD = GS.SOPMAL_CD AND ORDR.SUBSVC_INNB = GS.SUBSVC_INNB
|
||||
WHERE GS.USE_AT = 'Y'
|
||||
AND GS.SOPMAL_CD = #{sopmalCd}
|
||||
<if test='srchSelSubsvcNm != null and srchSelSubsvcNm != ""'>
|
||||
AND GS.SUBSVC_NM = #{srchSelSubsvcNm} /*구독서비스 명*/
|
||||
</if>
|
||||
<if test='srchSelSubsvcGnr != null and srchSelSubsvcGnr != ""'>
|
||||
AND GS.SUBSVC_GNR = #{srchSelSubsvcGnr} /*기수*/
|
||||
</if>
|
||||
<if test='srchSubsvcNm != null and srchSubsvcNm != ""'>
|
||||
AND GS.SUBSVC_NM LIKE CONCAT('%',#{srchSubsvcNm},'%') /*구독서비스 명*/
|
||||
</if>
|
||||
<if test='srchSubsvcGnrNm != null and srchSubsvcGnrNm != ""'>
|
||||
AND GS.SUBSVC_GNR_NM LIKE CONCAT('%',#{srchSubsvcGnrNm},'%') /*기수명*/
|
||||
</if>
|
||||
<if test='srchSubEndAt == "Y"'>
|
||||
<![CDATA[
|
||||
AND (GS.LAST_PROCS_ODR IS NULL OR GS.LAST_PROCS_ODR < DLVY_CNT) /*구독종료여부*/
|
||||
]]>
|
||||
</if>
|
||||
<choose>
|
||||
<when test='sortDv == "subsvcGnrAsc"'>
|
||||
ORDER BY SUBSVC_NM ASC, SUBSVC_GNR ASC /*구독서비스명+기수*/
|
||||
</when>
|
||||
<when test='sortDv == "subsvcGnrDesc"'>
|
||||
ORDER BY SUBSVC_NM DESC, SUBSVC_GNR DESC /*구독서비스명+기수*/
|
||||
</when>
|
||||
<when test='sortDv == "subscriberAsc"'>
|
||||
ORDER BY SUBSCRIBER_CNT ASC /*구독자수 정렬*/
|
||||
</when>
|
||||
<when test='sortDv == "subscriberDesc"'>
|
||||
ORDER BY SUBSCRIBER_CNT DESC /*구독자수 정렬*/
|
||||
</when>
|
||||
<otherwise>
|
||||
ORDER BY SUBSVC_NM ASC, SUBSVC_GNR ASC
|
||||
</otherwise>
|
||||
</choose>
|
||||
) MAIN
|
||||
WHERE (@ROWNUM:=0)=0
|
||||
) PV
|
||||
WHERE 1=1
|
||||
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
|
||||
</select>
|
||||
|
||||
<!--구독서비스 구독자조회 - 구독자목록 팝업 - 구독서비스 정보-->
|
||||
<select id="selectBOSubsvcInfo" parameterType="com.wb.domainserver.domain.gcone.ordr.subsvc.vo.BOSubsvcOrderVO" resultType="dataMap">
|
||||
SELECT GS.SUBSVC_NM, GS.SUBSVC_GNR, GS.SUBSVC_GNR_NM
|
||||
FROM GC_SUBSVC GS
|
||||
WHERE GS.SUBSVC_INNB = #{subsvcInnb}
|
||||
</select>
|
||||
|
||||
<!--구독서비스 구독자조회 - 구독자목록 팝업 - 구독자목록 조회-->
|
||||
<select id="selectBOSubsvcOrderMbrInfoList" parameterType="com.wb.domainserver.domain.gcone.ordr.subsvc.vo.BOSubsvcOrderVO" resultType="dataMap">
|
||||
SELECT CAST(@ROWNUM:=@ROWNUM + 1 AS UNSIGNED) AS RNUM
|
||||
, COUNT(*) OVER() AS TOT_CNT
|
||||
, MAIN.*
|
||||
FROM (
|
||||
SELECT GO.ORDR_INNB
|
||||
, GM.MBR_NM
|
||||
, GM.MBR_ID
|
||||
, GM.MBR_DV_CD
|
||||
, fn_get_member_grad_name(GO.SOPMAL_CD, GM.MBR_DV_CD, GM.MBR_INNB) AS GRADE
|
||||
, SUM(CASE WHEN GOIO.ORDR_STTUS_CD BETWEEN '35' AND '75' THEN 1 ELSE 0 END) AS LAST_PROCS_ODR/*최종차수 상품준비 ~ 배송완료*/
|
||||
, MAX(GOIO.UPDT_DT) AS LAST_PRCS_DT/*최종처리일*/
|
||||
FROM GC_ORDER GO
|
||||
JOIN GC_MEMBER GM ON GM.MBR_DV_CD = GO.MBR_DV_CD AND GM.MBR_INNB = GO.MBR_INNB
|
||||
JOIN GC_ORDER_ITEM GOI ON GO.SOPMAL_CD =GOI.SOPMAL_CD AND GO.ORDR_INNB = GOI.ORDR_INNB
|
||||
JOIN GC_ORDER_ITEM_OPTION GOIO ON GOI.SOPMAL_CD = GOIO.SOPMAL_CD AND GOI.ORDR_GOODS_INNB = GOIO.ORDR_GOODS_INNB AND GOIO.OPTN_TY = '01'
|
||||
WHERE GO.USE_AT = 'Y'
|
||||
AND GO.SUBSVC_AT = 'Y'
|
||||
AND GO.SUBSVC_INNB = #{subsvcInnb} /*구독서비스 고유번호*/
|
||||
GROUP BY GO.SOPMAL_CD, GO.ORDR_INNB, GM.MBR_DV_CD, GM.MBR_NM, GM.MBR_ID
|
||||
ORDER BY GO.ORDR_INNB ASC
|
||||
)MAIN
|
||||
WHERE (@ROWNUM:=0)=0
|
||||
</select>
|
||||
|
||||
<!--구독서비스 구독자조회 - 배송상품 목록팝업 - 배송상품목록 조회-->
|
||||
<select id="selectBOSubsvcOrderGoodsInfoList" parameterType="com.wb.domainserver.domain.gcone.ordr.subsvc.vo.BOSubsvcOrderVO" resultType="dataMap">
|
||||
SELECT CAST(@ROWNUM:=@ROWNUM + 1 AS UNSIGNED) AS RNUM
|
||||
, COUNT(*) OVER() AS TOT_CNT
|
||||
, MAIN.*
|
||||
FROM (
|
||||
SELECT GOIO.GOODS_OPTN_INNB
|
||||
, GOI.GOODS_IMG_COURS
|
||||
, GOI.GOODS_NM
|
||||
, GOIO.OPTN_NM_1
|
||||
, GOIO.OPTN_VAL_1
|
||||
, COUNT(DISTINCT GO.ORDR_INNB) AS APPLY_CNT/*적용횟수*/
|
||||
FROM GC_ORDER GO
|
||||
JOIN GC_ORDER_ITEM GOI ON GO.SOPMAL_CD =GOI.SOPMAL_CD AND GO.ORDR_INNB = GOI.ORDR_INNB
|
||||
JOIN GC_ORDER_ITEM_OPTION GOIO ON GOI.SOPMAL_CD = GOIO.SOPMAL_CD AND GOI.ORDR_GOODS_INNB = GOIO.ORDR_GOODS_INNB AND GOIO.OPTN_TY = '01'
|
||||
WHERE GO.USE_AT = 'Y'
|
||||
AND GO.SUBSVC_AT = 'Y'
|
||||
AND GOIO.ORDR_STTUS_CD BETWEEN '35' AND '75' /*상품준비 ~ 배송완료*/
|
||||
AND GO.SUBSVC_INNB = #{subsvcInnb} /*구독서비스 고유번호*/
|
||||
GROUP BY GOIO.GOODS_OPTN_INNB, GOODS_IMG_COURS, GOI.GOODS_NM, GOIO.OPTN_NM_1, GOIO.OPTN_VAL_1
|
||||
ORDER BY GOI.GOODS_NM, GOIO.OPTN_NM_1, GOIO.OPTN_VAL_1
|
||||
) MAIN
|
||||
WHERE (@ROWNUM:=0)=0
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
|
||||
@@ -129,6 +129,19 @@
|
||||
,RETURN_DLVY_APPLC_AT
|
||||
,RETURN_DLVY_AMT
|
||||
,EXCHNG_DLVY_AMT
|
||||
,RTNLC_INNB2
|
||||
,DFT_DLVY_AMT2
|
||||
,AMT_CND_USE_AT2
|
||||
,AMT_CND_ADIT_AMT2
|
||||
,CNT_CND_USE_AT2
|
||||
,CNT_CND_ADIT_AMT2
|
||||
,DLVY_AREA_ADIT_AT2
|
||||
,AREA_ADIT_DLVY_AMT2
|
||||
,BUNDLE_DLVY_USE_AT2
|
||||
,BUNDLE_DLVY_CND_AMT2
|
||||
,RETURN_DLVY_APPLC_AT2
|
||||
,RETURN_DLVY_AMT2
|
||||
,EXCHNG_DLVY_AMT2
|
||||
,USE_AT
|
||||
,REGUSR
|
||||
,REGIST_DT
|
||||
@@ -154,6 +167,19 @@
|
||||
,#{returnDlvyApplcAt}
|
||||
,#{returnDlvyAmt}
|
||||
,#{exchngDlvyAmt}
|
||||
,#{rtnlcInnb2}
|
||||
,#{dftDlvyAmt2}
|
||||
,#{amtCndUseAt2}
|
||||
,#{amtCndAditAmt2}
|
||||
,#{cntCndUseAt2}
|
||||
,#{cntCndAditAmt2}
|
||||
,#{dlvyAreaAditAt2}
|
||||
,#{areaAditDlvyAmt2}
|
||||
,#{bundleDlvyUseAt2}
|
||||
,#{bundleDlvyCndAmt2}
|
||||
,#{returnDlvyApplcAt2}
|
||||
,#{returnDlvyAmt2}
|
||||
,#{exchngDlvyAmt2}
|
||||
,'Y'
|
||||
,#{regusr}
|
||||
,now()
|
||||
@@ -200,12 +226,50 @@
|
||||
)
|
||||
</insert>
|
||||
|
||||
<!-- 배송 반송지 등록 -->
|
||||
<insert id="insertBODlvyGroupAddress2" parameterType="com.wb.domainserver.domain.gcone.setup.dlvygrp.vo.BODlvygrpVO">
|
||||
<selectKey keyProperty="rtnlcInnb2"
|
||||
resultType="java.lang.Integer"
|
||||
order="BEFORE">
|
||||
SELECT IFNULL(MAX(RTNLC_INNB),0) + 1 FROM GC_SHIPPING_ADDRESS WHERE SOPMAL_CD = #{sopmalCd}
|
||||
</selectKey>
|
||||
INSERT INTO GC_SHIPPING_ADDRESS
|
||||
(
|
||||
RTNLC_INNB
|
||||
, SOPMAL_CD
|
||||
, RTNLC_ZIP
|
||||
, RTNLC_ADRES
|
||||
, RTNLC_DTL_ADRES
|
||||
, RTNLC_TELNB
|
||||
, USE_AT
|
||||
, REGUSR
|
||||
, REGIST_DT
|
||||
, UPDUSR
|
||||
, UPDT_DT
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
#{rtnlcInnb2}
|
||||
, #{sopmalCd}
|
||||
, #{rtnlcZip2}
|
||||
, #{rtnlcAdres2}
|
||||
, #{rtnlcDtlAdres2}
|
||||
, #{rtnlcTelnb2}
|
||||
, 'Y'
|
||||
, #{regusr}
|
||||
, now()
|
||||
, #{regusr}
|
||||
, now()
|
||||
)
|
||||
</insert>
|
||||
|
||||
<!-- 배송그룹 정보 조회 -->
|
||||
<select id="selectBODlvyGroupDtlForm"
|
||||
parameterType="com.wb.domainserver.domain.gcone.setup.dlvygrp.vo.BODlvygrpVO"
|
||||
resultType="com.wb.domainserver.domain.gcone.setup.dlvygrp.vo.BODlvygrpVO">
|
||||
SELECT
|
||||
SG.DLVY_GROUP_INNB
|
||||
,SG.SOPMAL_CD
|
||||
,SG.DLVY_GROUP_DV_CD
|
||||
,SG.DLVY_GROUP_NM
|
||||
,SG.DFT_DLVY_AMT
|
||||
@@ -220,19 +284,41 @@
|
||||
,SG.RETURN_DLVY_APPLC_AT
|
||||
,SG.RETURN_DLVY_AMT
|
||||
,SG.EXCHNG_DLVY_AMT
|
||||
,SG.DFT_DLVY_AMT2
|
||||
,SG.AMT_CND_USE_AT2
|
||||
,SG.AMT_CND_ADIT_AMT2
|
||||
,SG.CNT_CND_USE_AT2
|
||||
,SG.CNT_CND_ADIT_AMT2
|
||||
,SG.DLVY_AREA_ADIT_AT2
|
||||
,SG.AREA_ADIT_DLVY_AMT2
|
||||
,SG.BUNDLE_DLVY_USE_AT2
|
||||
,SG.BUNDLE_DLVY_CND_AMT2
|
||||
,SG.RETURN_DLVY_APPLC_AT2
|
||||
,SG.RETURN_DLVY_AMT2
|
||||
,SG.EXCHNG_DLVY_AMT2
|
||||
,SG.RTNLC_INNB
|
||||
,SA.RTNLC_ZIP
|
||||
,SA.RTNLC_ADRES
|
||||
,SA.RTNLC_DTL_ADRES
|
||||
,SA.RTNLC_TELNB
|
||||
,SG.RTNLC_INNB2
|
||||
,SA1.RTNLC_ZIP
|
||||
,SA1.RTNLC_ADRES
|
||||
,SA1.RTNLC_DTL_ADRES
|
||||
,SA1.RTNLC_TELNB
|
||||
,SA2.RTNLC_ZIP AS RTNLC_ZIP2
|
||||
,SA2.RTNLC_ADRES AS RTNLC_ADRES2
|
||||
,SA2.RTNLC_DTL_ADRES AS RTNLC_DTL_ADRES2
|
||||
,SA2.RTNLC_TELNB AS RTNLC_TELNB2
|
||||
,SG.RETURN_DLVY_AMT
|
||||
,SG.EXCHNG_DLVY_AMT
|
||||
FROM GC_SHIPPING_GROUPING SG
|
||||
LEFT JOIN GC_SHIPPING_ADDRESS SA
|
||||
ON SG.RTNLC_INNB = SA.RTNLC_INNB
|
||||
AND SG.SOPMAL_CD = SA.SOPMAL_CD
|
||||
AND SG.USE_AT = 'Y'
|
||||
AND SA.USE_AT = 'Y'
|
||||
LEFT JOIN GC_SHIPPING_ADDRESS SA1
|
||||
ON SG.RTNLC_INNB = SA1.RTNLC_INNB
|
||||
AND SG.SOPMAL_CD = SA1.SOPMAL_CD
|
||||
AND SG.USE_AT = 'Y'
|
||||
AND SA1.USE_AT = 'Y'
|
||||
LEFT JOIN GC_SHIPPING_ADDRESS SA2
|
||||
ON SG.RTNLC_INNB2 = SA2.RTNLC_INNB
|
||||
AND SG.SOPMAL_CD = SA2.SOPMAL_CD
|
||||
AND SG.USE_AT = 'Y'
|
||||
AND SA2.USE_AT = 'Y'
|
||||
WHERE 1=1
|
||||
AND SG.SOPMAL_CD = #{sopmalCd}
|
||||
AND DLVY_GROUP_INNB = #{dlvyGroupInnb}
|
||||
@@ -257,6 +343,18 @@
|
||||
,RETURN_DLVY_APPLC_AT = #{returnDlvyApplcAt}
|
||||
,RETURN_DLVY_AMT = #{returnDlvyAmt}
|
||||
,EXCHNG_DLVY_AMT = #{exchngDlvyAmt}
|
||||
,DFT_DLVY_AMT2 = #{dftDlvyAmt2}
|
||||
,AMT_CND_USE_AT2 = #{amtCndUseAt2}
|
||||
,AMT_CND_ADIT_AMT2 = #{amtCndAditAmt2}
|
||||
,CNT_CND_USE_AT2 = #{cntCndUseAt2}
|
||||
,CNT_CND_ADIT_AMT2 = #{cntCndAditAmt2}
|
||||
,DLVY_AREA_ADIT_AT2 = #{dlvyAreaAditAt2}
|
||||
,AREA_ADIT_DLVY_AMT2 = #{areaAditDlvyAmt2}
|
||||
,BUNDLE_DLVY_USE_AT2 = #{bundleDlvyUseAt2}
|
||||
,BUNDLE_DLVY_CND_AMT2 = #{bundleDlvyCndAmt2}
|
||||
,RETURN_DLVY_APPLC_AT2 = #{returnDlvyApplcAt2}
|
||||
,RETURN_DLVY_AMT2 = #{returnDlvyAmt2}
|
||||
,EXCHNG_DLVY_AMT2 = #{exchngDlvyAmt2}
|
||||
,UPDUSR = #{updusr}
|
||||
,UPDT_DT = NOW()
|
||||
]]>
|
||||
@@ -278,11 +376,27 @@
|
||||
AND SOPMAL_CD = #{sopmalCd}
|
||||
</update>
|
||||
|
||||
<!-- 배송그룹 수정 -->
|
||||
<update id="updateBODlvyGroupRtnlc2"
|
||||
parameterType="com.wb.domainserver.domain.gcone.setup.dlvygrp.vo.BODlvygrpVO">
|
||||
UPDATE GC_SHIPPING_ADDRESS
|
||||
SET RTNLC_ZIP = #{rtnlcZip2}
|
||||
, RTNLC_ADRES = #{rtnlcAdres2}
|
||||
, RTNLC_DTL_ADRES = #{rtnlcDtlAdres2}
|
||||
, RTNLC_TELNB = #{rtnlcTelnb2}
|
||||
, UPDUSR = #{updusr}
|
||||
, UPDT_DT = NOW()
|
||||
WHERE 1=1
|
||||
AND RTNLC_INNB = #{rtnlcInnb2}
|
||||
AND SOPMAL_CD = #{sopmalCd}
|
||||
</update>
|
||||
|
||||
<!-- 배송그룹 삭제(사용여부 Update y > n) -->
|
||||
<update id="deleteBODlvyGroup" parameterType="com.wb.domainserver.domain.gcone.setup.dlvygrp.vo.BODlvygrpVO">
|
||||
<![CDATA[
|
||||
UPDATE GC_SHIPPING_GROUPING
|
||||
SET USE_AT = 'N'
|
||||
, UPDT_DT = NOW()
|
||||
]]>
|
||||
<include refid="selectDlvyKeyWhere"/>
|
||||
</update>
|
||||
@@ -291,10 +405,20 @@
|
||||
<update id="deleteBODlvyGroupRtnlc" parameterType="com.wb.domainserver.domain.gcone.setup.dlvygrp.vo.BODlvygrpVO">
|
||||
UPDATE GC_SHIPPING_ADDRESS
|
||||
SET USE_AT = 'N'
|
||||
, UPDT_DT = NOW()
|
||||
WHERE RTNLC_INNB = #{rtnlcInnb}
|
||||
AND SOPMAL_CD = #{sopmalCd}
|
||||
</update>
|
||||
|
||||
<!-- 배송그룹 삭제(사용여부 Update y > n) -->
|
||||
<update id="deleteBODlvyGroupRtnlc2" parameterType="com.wb.domainserver.domain.gcone.setup.dlvygrp.vo.BODlvygrpVO">
|
||||
UPDATE GC_SHIPPING_ADDRESS
|
||||
SET USE_AT = 'N'
|
||||
, UPDT_DT = NOW()
|
||||
WHERE RTNLC_INNB = #{rtnlcInnb2}
|
||||
AND SOPMAL_CD = #{sopmalCd}
|
||||
</update>
|
||||
|
||||
<!-- 배송그룹 고유키로 연결 상품의 갯수 검색 -->
|
||||
<select id="isIncludeGoods"
|
||||
parameterType="com.wb.domainserver.domain.gcone.setup.dlvygrp.vo.BODlvygrpVO"
|
||||
|
||||
@@ -25,6 +25,14 @@ secured:
|
||||
- /**/fonts/**
|
||||
- /favicon.ico
|
||||
- /**/vender/**
|
||||
batch:
|
||||
accessip:
|
||||
- 127.0.0.1
|
||||
- 10.2.1.76
|
||||
- 115.68.232.36
|
||||
uri:
|
||||
- /gcone/mbr/mbr/selectBOJoinGuidanceForm # 셈플로 넣음 사용하는 uri 설정해야함
|
||||
|
||||
|
||||
|
||||
#secured:
|
||||
|
||||
@@ -105,6 +105,7 @@ const fn_move_dlvylc_manage_full = function (pageIndex, callback, formId = '') {
|
||||
배송지 등록 팝업 호출
|
||||
***********************************************/
|
||||
const fn_move_dlvylc_regpage_pop = function (isPop, dftDlvylcAt) {
|
||||
$("#dlvylcUpdate").remove();
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: '/sopmal/mpage/mbr/selectDlvylcRegistForm',
|
||||
@@ -369,8 +370,90 @@ const fn_update_dlvylc = function (pageIndex,msg,isMobile) {
|
||||
jibunAddress: $(".lnbAdres").eq(index).val(),
|
||||
recpntNm: $(".recpntNmR").eq(index).val(),
|
||||
dtlAdres: $(".dtlAdres").eq(index).val(),
|
||||
dlvylcAreaCd: $(".dlvylcAreaCd").eq(index).val(),
|
||||
prefcd: $(".prefcd").eq(index).val(),
|
||||
cstmclerCd: $(".cstmclerCd").eq(index).val(),
|
||||
mbtlnb: $(".mbtlnb").eq(index).val(),
|
||||
extraAddress: extraAddress
|
||||
}, formId);
|
||||
fn_close_modal("dlvylcManage");
|
||||
}
|
||||
|
||||
/**********************************************
|
||||
배송지 관리 팝업 언어 설정
|
||||
***********************************************/
|
||||
const fn_toggle_langHeader = function () {
|
||||
var id = $('[name=dlvylcAreaCd]:checked').attr('id');
|
||||
|
||||
$('.langKr, .langJp').hide();
|
||||
$('.' + id).show();
|
||||
|
||||
if (id == 'langJp') {
|
||||
$('#zip').prop('readonly', false);
|
||||
$('#cstmclerCd').prop('disabled', true);
|
||||
$('#prefcode').prop('disabled', false);
|
||||
} else {
|
||||
$('#zip').prop('readonly', true);
|
||||
$('#cstmclerCd').prop('disabled', false);
|
||||
$('#prefcode').prop('disabled', true);
|
||||
|
||||
$('#postcodeAlert').hide();
|
||||
}
|
||||
}
|
||||
|
||||
/**********************************************
|
||||
ibsnet api 호출
|
||||
***********************************************/
|
||||
const fn_select_postcodeJp = function () {
|
||||
$('#postcodeAlert').hide();
|
||||
|
||||
$.ajax({
|
||||
type: 'GET',
|
||||
url: 'https://zipcloud.ibsnet.co.jp/api/search?zipcode=' + $('#zip').val(),
|
||||
dataType: 'jsonp',
|
||||
success: function(data) {
|
||||
if(data.status == 200) {
|
||||
let result = data.results[0];
|
||||
|
||||
let adres = result.address1;
|
||||
let dtlAdres = [result.address2, result.address3].join(" ");
|
||||
let prefcode = result.prefcode;
|
||||
|
||||
$("#adres").val(adres);
|
||||
$("#dtlAdres").val(dtlAdres);
|
||||
$("#prefcode").val(prefcode);
|
||||
$("#adresDv").val("01");
|
||||
} else {
|
||||
$('#postcodeAlert').show();
|
||||
}
|
||||
},
|
||||
error: function (xhr, status, error) {
|
||||
console.error('API 호출 실패:', error);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**********************************************
|
||||
배송지 관리 팝업 언어별 form 초기화
|
||||
***********************************************/
|
||||
let dlvylcFormPreValues = {};
|
||||
const fn_clear_dlvylcForm = function () {
|
||||
const tableInputs = $("#dlvylcFormTable").find("input[name]");
|
||||
|
||||
if (Object.keys(dlvylcFormPreValues).length == 0) {
|
||||
tableInputs.each(function () {
|
||||
const input = $(this);
|
||||
const name = input.attr("name");
|
||||
dlvylcFormPreValues[name] = input.val();
|
||||
input.val("");
|
||||
});
|
||||
} else {
|
||||
tableInputs.each(function () {
|
||||
const input = $(this);
|
||||
const name = input.attr("name");
|
||||
const currentValue = input.val();
|
||||
input.val(dlvylcFormPreValues[name] ?? "");
|
||||
dlvylcFormPreValues[name] = currentValue;
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -119,6 +119,7 @@ const fn_move_dlvylc_manage_pop_wrapper = function (pageIndex) {
|
||||
배송지 등록 팝업 호출 ok
|
||||
***********************************************/
|
||||
const fn_move_dlvylc_regpage_pop = function (isPop, mbrInnb, mbrDvCd, dftDlvylcAt) {
|
||||
$("#dlvylcUpdate").remove();
|
||||
if (!mbrInnb) {
|
||||
mbrInnb = $("#leftMbrInnb").val();
|
||||
}
|
||||
@@ -318,8 +319,91 @@ const fn_select_mngrOrdr_postcode = function (callback, index, formId = '') {
|
||||
jibunAddress: $(".lnbAdres").eq(index).val(),
|
||||
recpntNm: $(".recpntNmR").eq(index).val(),
|
||||
dtlAdres: $(".dtlAdres").eq(index).val(),
|
||||
dlvylcAreaCd: $(".dlvylcAreaCd").eq(index).val(),
|
||||
prefcd: $(".prefcd").eq(index).val(),
|
||||
cstmclerCd: $(".cstmclerCd").eq(index).val(),
|
||||
mbtlnb: $(".dlvylcMbtlnb").eq(index).val(),
|
||||
extraAddress: extraAddress
|
||||
}, formId);
|
||||
fn_close_modal("dlvylcManage");
|
||||
}
|
||||
|
||||
/**********************************************
|
||||
배송지 관리 팝업 언어 설정
|
||||
***********************************************/
|
||||
const fn_toggle_langHeader = function () {
|
||||
var id = $('[name=dlvylcAreaCd]:checked').attr('id');
|
||||
|
||||
$('.langKr, .langJp').hide();
|
||||
$('.' + id).show();
|
||||
|
||||
if (id == 'langJp') {
|
||||
$('#zip').prop('readonly', false);
|
||||
$('#cstmclerCd').prop('disabled', true);
|
||||
$('#prefcode').prop('disabled', false);
|
||||
} else {
|
||||
$('#zip').prop('readonly', true);
|
||||
$('#cstmclerCd').prop('disabled', false);
|
||||
$('#prefcode').prop('disabled', true);
|
||||
|
||||
$('#postcodeAlert').hide();
|
||||
}
|
||||
}
|
||||
|
||||
/**********************************************
|
||||
ibsnet api 호출
|
||||
***********************************************/
|
||||
const fn_select_postcodeJp = function () {
|
||||
$('#postcodeAlert').hide();
|
||||
|
||||
$.ajax({
|
||||
type: 'GET',
|
||||
url: 'https://zipcloud.ibsnet.co.jp/api/search?zipcode=' + $('#zip').val()
|
||||
+'&callback=' + 'fn_set_postcodeJp',
|
||||
dataType: 'jsonp',
|
||||
success: function(data) {
|
||||
if(data.status == 200) {
|
||||
let result = data.results[0];
|
||||
|
||||
let adres = result.address1;
|
||||
let dtlAdres = [result.address2, result.address3].join(" ");
|
||||
let prefcode = result.prefcode;
|
||||
|
||||
$("#adres").val(adres);
|
||||
$("#dtlAdres").val(dtlAdres);
|
||||
$("#prefcode").val(prefcode);
|
||||
$("#adresDv").val("01");
|
||||
} else {
|
||||
$('#postcodeAlert').show();
|
||||
}
|
||||
},
|
||||
error: function (xhr, status, error) {
|
||||
console.error('API 호출 실패:', error);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**********************************************
|
||||
배송지 관리 팝업 언어별 form 초기화
|
||||
***********************************************/
|
||||
let dlvylcFormPreValues = {};
|
||||
const fn_clear_dlvylcForm = function () {
|
||||
const tableInputs = $("#dlvylcFormTable").find("input[name]");
|
||||
|
||||
if (Object.keys(dlvylcFormPreValues).length == 0) {
|
||||
tableInputs.each(function () {
|
||||
const input = $(this);
|
||||
const name = input.attr("name");
|
||||
dlvylcFormPreValues[name] = input.val();
|
||||
input.val("");
|
||||
});
|
||||
} else {
|
||||
tableInputs.each(function () {
|
||||
const input = $(this);
|
||||
const name = input.attr("name");
|
||||
const currentValue = input.val();
|
||||
input.val(dlvylcFormPreValues[name] ?? "");
|
||||
dlvylcFormPreValues[name] = currentValue;
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -9112,10 +9112,10 @@ main {
|
||||
padding: 32px 32px;
|
||||
}
|
||||
.subList__list__inner {
|
||||
width: 960px;
|
||||
width: 1080px;
|
||||
margin-inline: auto;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(5, 1fr);
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
gap: 16px;
|
||||
}
|
||||
.subList__list__item {
|
||||
|
||||
@@ -108,6 +108,7 @@ const fn_move_dlvylc_manage_pop = function (pageIndex, mbrInnb, mbrDvCd, callbac
|
||||
배송지 등록 팝업 호출 ok
|
||||
***********************************************/
|
||||
const fn_move_dlvylc_regpage_pop = function (isPop, mbrInnb, mbrDvCd, dftDlvylcAt) {
|
||||
$("#dlvylcUpdate").remove();
|
||||
if (!mbrInnb) {
|
||||
mbrInnb = $("#leftMbrInnb").val();
|
||||
}
|
||||
@@ -308,8 +309,91 @@ const fn_select_mngrOrdr_postcode = function (callback, index) {
|
||||
jibunAddress: $(".lnbAdres").eq(index).val(),
|
||||
recpntNm: $(".recpntNmR").eq(index).val(),
|
||||
dtlAdres: $(".dtlAdres").eq(index).val(),
|
||||
dlvylcAreaCd: $(".dlvylcAreaCd").eq(index).val(),
|
||||
prefcd: $(".prefcd").eq(index).val(),
|
||||
cstmclerCd: $(".cstmclerCd").eq(index).val(),
|
||||
mbtlnb: $(".dlvylcMbtlnb").eq(index).val(),
|
||||
extraAddress: extraAddress
|
||||
});
|
||||
fn_close_modal("dlvylcManage");
|
||||
}
|
||||
|
||||
/**********************************************
|
||||
배송지 관리 팝업 언어 설정
|
||||
***********************************************/
|
||||
const fn_toggle_langHeader = function () {
|
||||
var id = $('[name=dlvylcAreaCd]:checked').attr('id');
|
||||
|
||||
$('.langKr, .langJp').hide();
|
||||
$('.' + id).show();
|
||||
|
||||
if (id == 'langJp') {
|
||||
$('#zip').prop('readonly', false);
|
||||
$('#cstmclerCd').prop('disabled', true);
|
||||
$('#prefcode').prop('disabled', false);
|
||||
} else {
|
||||
$('#zip').prop('readonly', true);
|
||||
$('#cstmclerCd').prop('disabled', false);
|
||||
$('#prefcode').prop('disabled', true);
|
||||
|
||||
$('#postcodeAlert').hide();
|
||||
}
|
||||
}
|
||||
|
||||
/**********************************************
|
||||
ibsnet api 호출
|
||||
***********************************************/
|
||||
const fn_select_postcodeJp = function () {
|
||||
$('#postcodeAlert').hide();
|
||||
|
||||
$.ajax({
|
||||
type: 'GET',
|
||||
url: 'https://zipcloud.ibsnet.co.jp/api/search?zipcode=' + $('#zip').val()
|
||||
+'&callback=' + 'fn_set_postcodeJp',
|
||||
dataType: 'jsonp',
|
||||
success: function(data) {
|
||||
if(data.status == 200) {
|
||||
let result = data.results[0];
|
||||
|
||||
let adres = result.address1;
|
||||
let dtlAdres = [result.address2, result.address3].join(" ");
|
||||
let prefcode = result.prefcode;
|
||||
|
||||
$("#adres").val(adres);
|
||||
$("#dtlAdres").val(dtlAdres);
|
||||
$("#prefcode").val(prefcode);
|
||||
$("#adresDv").val("01");
|
||||
} else {
|
||||
$('#postcodeAlert').show();
|
||||
}
|
||||
},
|
||||
error: function (xhr, status, error) {
|
||||
console.error('API 호출 실패:', error);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**********************************************
|
||||
배송지 관리 팝업 언어별 form 초기화
|
||||
***********************************************/
|
||||
let dlvylcFormPreValues = {};
|
||||
const fn_clear_dlvylcForm = function () {
|
||||
const tableInputs = $("#dlvylcFormTable").find("input[name]");
|
||||
|
||||
if (Object.keys(dlvylcFormPreValues).length == 0) {
|
||||
tableInputs.each(function () {
|
||||
const input = $(this);
|
||||
const name = input.attr("name");
|
||||
dlvylcFormPreValues[name] = input.val();
|
||||
input.val("");
|
||||
});
|
||||
} else {
|
||||
tableInputs.each(function () {
|
||||
const input = $(this);
|
||||
const name = input.attr("name");
|
||||
const currentValue = input.val();
|
||||
input.val(dlvylcFormPreValues[name] ?? "");
|
||||
dlvylcFormPreValues[name] = currentValue;
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -119,6 +119,7 @@ const fn_move_dlvylc_manage_pop_wrapper = function (pageIndex) {
|
||||
배송지 등록 팝업 호출 ok
|
||||
***********************************************/
|
||||
const fn_move_dlvylc_regpage_pop = function (isPop, mbrInnb, mbrDvCd, dftDlvylcAt) {
|
||||
$("#dlvylcUpdate").remove();
|
||||
if (!mbrInnb) {
|
||||
mbrInnb = $("#leftMbrInnb").val();
|
||||
}
|
||||
@@ -318,8 +319,91 @@ const fn_select_mngrOrdr_postcode = function (callback, index, formId = '') {
|
||||
jibunAddress: $(".lnbAdres").eq(index).val(),
|
||||
recpntNm: $(".recpntNmR").eq(index).val(),
|
||||
dtlAdres: $(".dtlAdres").eq(index).val(),
|
||||
dlvylcAreaCd: $(".dlvylcAreaCd").eq(index).val(),
|
||||
prefcd: $(".prefcd").eq(index).val(),
|
||||
cstmclerCd: $(".cstmclerCd").eq(index).val(),
|
||||
mbtlnb: $(".dlvylcMbtlnb").eq(index).val(),
|
||||
extraAddress: extraAddress
|
||||
}, formId);
|
||||
fn_close_modal("dlvylcManage");
|
||||
}
|
||||
|
||||
/**********************************************
|
||||
배송지 관리 팝업 언어 설정
|
||||
***********************************************/
|
||||
const fn_toggle_langHeader = function () {
|
||||
var id = $('[name=dlvylcAreaCd]:checked').attr('id');
|
||||
|
||||
$('.langKr, .langJp').hide();
|
||||
$('.' + id).show();
|
||||
|
||||
if (id == 'langJp') {
|
||||
$('#zip').prop('readonly', false);
|
||||
$('#cstmclerCd').prop('disabled', true);
|
||||
$('#prefcode').prop('disabled', false);
|
||||
} else {
|
||||
$('#zip').prop('readonly', true);
|
||||
$('#cstmclerCd').prop('disabled', false);
|
||||
$('#prefcode').prop('disabled', true);
|
||||
|
||||
$('#postcodeAlert').hide();
|
||||
}
|
||||
}
|
||||
|
||||
/**********************************************
|
||||
ibsnet api 호출
|
||||
***********************************************/
|
||||
const fn_select_postcodeJp = function () {
|
||||
$('#postcodeAlert').hide();
|
||||
|
||||
$.ajax({
|
||||
type: 'GET',
|
||||
url: 'https://zipcloud.ibsnet.co.jp/api/search?zipcode=' + $('#zip').val()
|
||||
+'&callback=' + 'fn_set_postcodeJp',
|
||||
dataType: 'jsonp',
|
||||
success: function(data) {
|
||||
if(data.status == 200) {
|
||||
let result = data.results[0];
|
||||
|
||||
let adres = result.address1;
|
||||
let dtlAdres = [result.address2, result.address3].join(" ");
|
||||
let prefcode = result.prefcode;
|
||||
|
||||
$("#adres").val(adres);
|
||||
$("#dtlAdres").val(dtlAdres);
|
||||
$("#prefcode").val(prefcode);
|
||||
$("#adresDv").val("01");
|
||||
} else {
|
||||
$('#postcodeAlert').show();
|
||||
}
|
||||
},
|
||||
error: function (xhr, status, error) {
|
||||
console.error('API 호출 실패:', error);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**********************************************
|
||||
배송지 관리 팝업 언어별 form 초기화
|
||||
***********************************************/
|
||||
let dlvylcFormPreValues = {};
|
||||
const fn_clear_dlvylcForm = function () {
|
||||
const tableInputs = $("#dlvylcFormTable").find("input[name]");
|
||||
|
||||
if (Object.keys(dlvylcFormPreValues).length == 0) {
|
||||
tableInputs.each(function () {
|
||||
const input = $(this);
|
||||
const name = input.attr("name");
|
||||
dlvylcFormPreValues[name] = input.val();
|
||||
input.val("");
|
||||
});
|
||||
} else {
|
||||
tableInputs.each(function () {
|
||||
const input = $(this);
|
||||
const name = input.attr("name");
|
||||
const currentValue = input.val();
|
||||
input.val(dlvylcFormPreValues[name] ?? "");
|
||||
dlvylcFormPreValues[name] = currentValue;
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -9142,10 +9142,10 @@ main {
|
||||
padding: 32px 32px;
|
||||
}
|
||||
.subList__list__inner {
|
||||
width: 960px;
|
||||
width: 1080px;
|
||||
margin-inline: auto;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(5, 1fr);
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
gap: 16px;
|
||||
}
|
||||
.subList__list__item {
|
||||
|
||||
@@ -9112,10 +9112,10 @@ main {
|
||||
padding: 32px 32px;
|
||||
}
|
||||
.subList__list__inner {
|
||||
width: 960px;
|
||||
width: 1080px;
|
||||
margin-inline: auto;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(5, 1fr);
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
gap: 16px;
|
||||
}
|
||||
.subList__list__item {
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
fn_create_ckeditor('#joinGuidanceWords', sopmalCd);
|
||||
fn_create_ckeditor('#joinBnef', sopmalCd);
|
||||
fn_create_ckeditor('#joinComptWords', sopmalCd);
|
||||
fn_create_ckeditor('#subsvcGuidanceWords', sopmalCd);
|
||||
|
||||
$("#kakaoIntrlckAt-Y").on("change", function () {
|
||||
if ($(this).is(":checked")) {
|
||||
@@ -159,6 +160,24 @@
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// 환율 입력 (숫자와 소숫점. 2자리수까지 허용)
|
||||
$("#buyRate, #sellRate").on("input", function () {
|
||||
let value = $(this).val();
|
||||
value = value.replace(/[^0-9.]/g, "");
|
||||
|
||||
const dotCount = (value.match(/\./g) || []).length;
|
||||
if (dotCount > 1) {
|
||||
value = value.substring(0, value.lastIndexOf("."));
|
||||
}
|
||||
|
||||
const parts = value.split(".");
|
||||
if (parts[1] && parts[1].length > 2) {
|
||||
value = parts[0] + "." + parts[1].slice(0, 2);
|
||||
}
|
||||
|
||||
$(this).val(value);
|
||||
});
|
||||
});
|
||||
isChkd_Dup = false;
|
||||
|
||||
@@ -481,6 +500,7 @@
|
||||
regForm.find("#joinGuidanceWords").val(fn_get_editor_data('#joinGuidanceWords'));
|
||||
regForm.find("#joinBnef").val(fn_get_editor_data('#joinBnef'));
|
||||
regForm.find("#joinComptWords").val(fn_get_editor_data('#joinComptWords'));
|
||||
regForm.find("#subsvcGuidanceWords").val(fn_get_editor_data('#subsvcGuidanceWords'));
|
||||
let params = regForm.serialize();
|
||||
|
||||
if (isChkd_Dup) {
|
||||
@@ -1511,6 +1531,26 @@
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>환율(살때) 일본 1円(엔)기준</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="input-container">
|
||||
<input type="text" class="input-text sm right number" name="buyRate" id="buyRate" title="1엔 환율(살때)">
|
||||
<span class="input-unit-text">원</span>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<th>환율(팔때) 일본 1円(엔)기준</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="input-container">
|
||||
<input type="text" class="input-text sm right number" name="sellRate" id="sellRate" title="1엔 환율(팔때)">
|
||||
<span class="input-unit-text">원</span>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@@ -1956,7 +1996,17 @@
|
||||
<td colspan="3">
|
||||
<div class="td-inner">
|
||||
<textarea class="textarea" id="joinComptWords" name="joinComptWords"
|
||||
title="회원가입 주요혜택" rows="2">
|
||||
title="회원가입 완료문구" rows="2">
|
||||
</textarea>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>구독서비스 안내문구</th>
|
||||
<td colspan="3">
|
||||
<div class="td-inner">
|
||||
<textarea class="textarea" id="subsvcGuidanceWords" name="subsvcGuidanceWords"
|
||||
title="구독서비스 안내문구" rows="2">
|
||||
</textarea>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
@@ -51,6 +51,7 @@
|
||||
fn_create_ckeditor('#joinGuidanceWords', sopmalCd);
|
||||
fn_create_ckeditor('#joinBnef', sopmalCd);
|
||||
fn_create_ckeditor('#joinComptWords', sopmalCd);
|
||||
fn_create_ckeditor('#subsvcGuidanceWords', sopmalCd);
|
||||
|
||||
// fn_get_join_info();
|
||||
|
||||
@@ -195,6 +196,24 @@
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// 환율 입력 (숫자와 소숫점. 2자리수까지 허용)
|
||||
$("#buyRate, #sellRate").on("input", function () {
|
||||
let value = $(this).val();
|
||||
value = value.replace(/[^0-9.]/g, "");
|
||||
|
||||
const dotCount = (value.match(/\./g) || []).length;
|
||||
if (dotCount > 1) {
|
||||
value = value.substring(0, value.lastIndexOf("."));
|
||||
}
|
||||
|
||||
const parts = value.split(".");
|
||||
if (parts[1] && parts[1].length > 2) {
|
||||
value = parts[0] + "." + parts[1].slice(0, 2);
|
||||
}
|
||||
|
||||
$(this).val(value);
|
||||
});
|
||||
});
|
||||
|
||||
const fn_get_join_info = function() {
|
||||
@@ -210,6 +229,7 @@
|
||||
fn_set_editor_data("#joinGuidanceWords", resultJson.joinInfo.joinGuidanceWords);
|
||||
fn_set_editor_data("#joinBnef", resultJson.joinInfo.joinBnef);
|
||||
fn_set_editor_data("#joinComptWords", resultJson.joinInfo.joinComptWords);
|
||||
fn_set_editor_data("#subsvcGuidanceWords", resultJson.joinInfo.subsvcGuidanceWords);
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -679,6 +699,7 @@
|
||||
updForm.find("#joinGuidanceWords").val(fn_get_editor_data('#joinGuidanceWords'));
|
||||
updForm.find("#joinBnef").val(fn_get_editor_data('#joinBnef'));
|
||||
updForm.find("#joinComptWords").val(fn_get_editor_data('#joinComptWords'));
|
||||
updForm.find("#subsvcGuidanceWords").val(fn_get_editor_data('#subsvcGuidanceWords'));
|
||||
let params = updForm.serialize();
|
||||
|
||||
if (fn_check_selectStplatBox() > 0) {
|
||||
@@ -1649,7 +1670,26 @@
|
||||
<input type="text" class="input-text sm right number" name="ordrAtmcPurchsDcsnPd" id="ordrAt" title="자동 구매 확정기간" maxlength="3" value="${resultMap.sopmalDetailList[0].ordrAtmcPurchsDcsnPd }" ${ordrAtmcPurchsDcsnPdDisabled }>
|
||||
<span class="input-unit-text">일</span>
|
||||
</div>
|
||||
<span class="gray-7">(출고 완료, 배송중, 배송 완료 후 해당기간 경과 시 자동 구매 확정)</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>환율(살때) 일본 1円(엔)기준</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="input-container">
|
||||
<input type="text" class="input-text sm right" name="buyRate" id="buyRate" title="1엔 환율(살때)" value="${resultMap.sopmalDetailList[0].buyRate }">
|
||||
<span class="input-unit-text">원</span>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<th>환율(팔때) 일본 1円(엔)기준</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="input-container">
|
||||
<input type="text" class="input-text sm right" name="sellRate" id="sellRate" title="1엔 환율(팔때)" value="${resultMap.sopmalDetailList[0].sellRate }">
|
||||
<span class="input-unit-text">원</span>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -2171,12 +2211,23 @@
|
||||
<td colspan="3">
|
||||
<div class="td-inner">
|
||||
<textarea class="textarea" id="joinComptWords" name="joinComptWords"
|
||||
title="회원가입 주요혜택" rows="2">
|
||||
title="회원가입 완료문구" rows="2">
|
||||
${resultMap.sopmalDetailList[0].joinComptWords }
|
||||
</textarea>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>구독서비스 안내문구</th>
|
||||
<td colspan="3">
|
||||
<div class="td-inner">
|
||||
<textarea class="textarea" id="subsvcGuidanceWords" name="subsvcGuidanceWords"
|
||||
title="구독서비스 안내문구" rows="2">
|
||||
${resultMap.sopmalDetailList[0].subsvcGuidanceWords }
|
||||
</textarea>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@@ -159,38 +159,46 @@
|
||||
</div>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<span class="footer-body__text01">
|
||||
사업자명 : <c:out value="${operBsnmInfo.bsnmNm}"/>
|
||||
</span>
|
||||
<div style="background-color: mistyrose; text-align: center">
|
||||
<span class="footer-body__text01" style="color: red;">
|
||||
술은 만 20세부터, 미성년자의 음주는 법률로 금지되어 있습니다. 만 20세 미만의 분에게는 술을 판매하지 않습니다.<br>
|
||||
お酒は20歳から、未成年者の飲酒は法律で禁止されています。満20歳未満の方にはお酒を販売していません。
|
||||
</span>
|
||||
</div>
|
||||
<%-- <span class="footer-body__text01">--%>
|
||||
<%-- 사업자명 : <c:out value="${operBsnmInfo.bsnmNm}"/>--%>
|
||||
<%-- </span>--%>
|
||||
<p class="footer-body__text02">
|
||||
대표자 : <c:out value="${operBsnmInfo.reprsntvnm}"/>
|
||||
주소:
|
||||
<c:choose>
|
||||
<c:when test="${not empty operBsnmInfo.rnmAdres && not empty operBsnmInfo.lnbAdres}">
|
||||
<c:out value="${operBsnmInfo.lnbAdres}"/>
|
||||
</c:when>
|
||||
<c:when test="${empty operBsnmInfo.rnmAdres && not empty operBsnmInfo.lnbAdres}">
|
||||
<c:out value="${operBsnmInfo.lnbAdres}"/>
|
||||
</c:when>
|
||||
<c:when test="${not empty operBsnmInfo.rnmAdres && empty operBsnmInfo.lnbAdres}">
|
||||
<c:out value="${operBsnmInfo.rnmAdres}"/>
|
||||
</c:when>
|
||||
</c:choose>
|
||||
<c:out value="${operBsnmInfo.dtlAdres}"/>
|
||||
대표전화 : <c:out value="${sopmalInfo.reprsntTelnb}"/>
|
||||
대표이메일 :
|
||||
[상호명] <b><c:out value="${operBsnmInfo.bsnmNm}"/> </b>
|
||||
[주소]
|
||||
<b>
|
||||
<c:choose>
|
||||
<c:when test="${not empty operBsnmInfo.rnmAdres && not empty operBsnmInfo.lnbAdres}">
|
||||
<c:out value="${operBsnmInfo.lnbAdres}"/>
|
||||
</c:when>
|
||||
<c:when test="${empty operBsnmInfo.rnmAdres && not empty operBsnmInfo.lnbAdres}">
|
||||
<c:out value="${operBsnmInfo.lnbAdres}"/>
|
||||
</c:when>
|
||||
<c:when test="${not empty operBsnmInfo.rnmAdres && empty operBsnmInfo.lnbAdres}">
|
||||
<c:out value="${operBsnmInfo.rnmAdres}"/>
|
||||
</c:when>
|
||||
</c:choose>
|
||||
<c:out value="${operBsnmInfo.dtlAdres}"/>
|
||||
</b>
|
||||
<%-- 대표전화 : <c:out value="${sopmalInfo.reprsntTelnb}"/> --%>
|
||||
[대표이메일]
|
||||
<a href="mailto:<c:out value='${sopmalInfo.reprsntEmail}'/>">
|
||||
<c:out value="${sopmalInfo.reprsntEmail}"/>
|
||||
</a>
|
||||
<br/>
|
||||
개인정보관리책임자 : <c:out value="${operBsnmInfo.indvdlinfoPrtcRspnberNm}"/>
|
||||
사업자 등록번호: <c:out value="${operBsnmInfo.bizrnb}"/>
|
||||
<a href="javascript:;" onclick="window.open('https://www.ftc.go.kr/bizCommPop.do?wrkr_no=<c:out value='${operBsnmInfo.replaceBizrnb}'/>','communicationViewPopup','width=750,height=700,scrollbars=yes')">
|
||||
[사업자정보확인]
|
||||
</a>
|
||||
통신판매업 신고번호 : <c:out value="${sleBsnmInfo.mobDclNb}"/>
|
||||
<%-- <br/>--%>
|
||||
<%-- 개인정보관리책임자 : <c:out value="${operBsnmInfo.indvdlinfoPrtcRspnberNm}"/> --%>
|
||||
<%-- 사업자 등록번호: <c:out value="${operBsnmInfo.bizrnb}"/>--%>
|
||||
<%-- <a href="javascript:;" onclick="window.open('https://www.ftc.go.kr/bizCommPop.do?wrkr_no=<c:out value='${operBsnmInfo.replaceBizrnb}'/>','communicationViewPopup','width=750,height=700,scrollbars=yes')">--%>
|
||||
<%-- [사업자정보확인]--%>
|
||||
<%-- </a> --%>
|
||||
<%-- 통신판매업 신고번호 : <c:out value="${sleBsnmInfo.mobDclNb}"/>--%>
|
||||
</p>
|
||||
<p class="footer-body__text03">
|
||||
<p class="footer-body__text03 text-center">
|
||||
Copyright ⓒ<c:out value="${sleBsnmInfo.bsnmNm}"/> All rights reserved.
|
||||
</p>
|
||||
<div class="footer-image-container">
|
||||
|
||||
@@ -22,6 +22,10 @@
|
||||
</c:forEach>
|
||||
</c:if>
|
||||
</ul>
|
||||
<div class="footer__second" style="color: red;">
|
||||
술은 만 20세부터, 미성년자의 음주는 법률로 금지되어 있습니다. 만 20세 미만의 분에게는 술을 판매하지 않습니다.<br>
|
||||
お酒は20歳から、未成年者の飲酒は法律で禁止されています。満20歳未満の方にはお酒を販売していません。
|
||||
</div>
|
||||
<div class="footer__second">
|
||||
<button type="button" class="footer__second__detailBtn">사업자 정보 확인</button>
|
||||
<c:if test = "${not empty footerInfo.footerInfo.familySite}">
|
||||
@@ -117,12 +121,12 @@
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<li>
|
||||
<span class="footer__third__th">사업자명</span>
|
||||
<span class="footer__third__th">상호명</span>
|
||||
<span class="footer__third__td">
|
||||
<c:out value="${operBsnmInfo.bsnmNm}"/>
|
||||
</span>
|
||||
<c:out value="${operBsnmInfo.bsnmNm}"/>
|
||||
</span>
|
||||
</li>
|
||||
<li><span class="footer__third__th">대표자</span><span class="footer__third__td"><c:out value="${operBsnmInfo.reprsntvnm}"/></span></li>
|
||||
<%-- <li><span class="footer__third__th">대표자</span><span class="footer__third__td"><c:out value="${operBsnmInfo.reprsntvnm}"/></span></li>--%>
|
||||
<li><span class="footer__third__th">주소</span><span class="footer__third__td">
|
||||
<c:choose>
|
||||
<c:when test = "${not empty operBsnmInfo.rnmAdres && not empty operBsnmInfo.lnbAdres}">
|
||||
@@ -135,21 +139,21 @@
|
||||
<c:out value="${operBsnmInfo.rnmAdres}"/>
|
||||
</c:when>
|
||||
</c:choose> <c:out value="${operBsnmInfo.dtlAdres}"/></span></li>
|
||||
<li><span class="footer__third__th">대표전화</span><span class="footer__third__td"><c:out value="${sopmalInfo.reprsntTelnb}"/></span>
|
||||
</li>
|
||||
<%-- <li><span class="footer__third__th">대표전화</span><span class="footer__third__td"><c:out value="${sopmalInfo.reprsntTelnb}"/></span>--%>
|
||||
<%-- </li>--%>
|
||||
<li><span class="footer__third__th">대표이메일</span>
|
||||
<a href="mailto:<c:out value='${sopmalInfo.reprsntEmail}'/>" class="footer__third__td"><strong><c:out value="${sopmalInfo.reprsntEmail}"/></strong></a>
|
||||
</li>
|
||||
<li><span class="footer__third__th">사업자 등록번호</span><span
|
||||
class="footer__third__td"><c:out value="${operBsnmInfo.bizrnb}"/></span>
|
||||
<a href="javascript:;" onclick="window.open('https://www.ftc.go.kr/bizCommPop.do?wrkr_no=<c:out value="${operBsnmInfo.replaceBizrnb}"/>','communicationViewPopup','width=750,height=700,scrollbars=yes')" class="footer__underLine">사업자정보확인</a>
|
||||
</li>
|
||||
<li><span class="footer__third__th">개인정보관리책임자</span><span class="footer__third__td"><c:out value="${operBsnmInfo.indvdlinfoPrtcRspnberNm}"/></span>
|
||||
</li>
|
||||
<li><span class="footer__third__th">통신판매업 신고번호</span><span class="footer__third__td"><c:out value="${sleBsnmInfo.mobDclNb}"/></span></li>
|
||||
<%-- <li><span class="footer__third__th">사업자 등록번호</span><span--%>
|
||||
<%-- class="footer__third__td"><c:out value="${operBsnmInfo.bizrnb}"/></span>--%>
|
||||
<%-- <a href="javascript:;" onclick="window.open('https://www.ftc.go.kr/bizCommPop.do?wrkr_no=<c:out value="${operBsnmInfo.replaceBizrnb}"/>','communicationViewPopup','width=750,height=700,scrollbars=yes')" class="footer__underLine">사업자정보확인</a>--%>
|
||||
<%-- </li>--%>
|
||||
<%-- <li><span class="footer__third__th">개인정보관리책임자</span><span class="footer__third__td"><c:out value="${operBsnmInfo.indvdlinfoPrtcRspnberNm}"/></span>--%>
|
||||
<%-- </li>--%>
|
||||
<%-- <li><span class="footer__third__th">통신판매업 신고번호</span><span class="footer__third__td"><c:out value="${sleBsnmInfo.mobDclNb}"/></span></li>--%>
|
||||
</ul>
|
||||
<div class="footer__logo">
|
||||
</div>
|
||||
<%-- <div class="footer__logo">--%>
|
||||
<%-- </div>--%>
|
||||
<p class="footer__copyright">ⓒ<c:out value="${sleBsnmInfo.bsnmNm}"/> All rights reserved.</p>
|
||||
<%--로딩이미지--%>
|
||||
<img src="/mobile/images/loading.svg" style = "display:none" class = "loadingImg">
|
||||
|
||||
@@ -79,6 +79,7 @@
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
<%--
|
||||
<a href="/sopmal/mpage/ordr/selectMbrOrdrListInqire" class="member-rank-summary__summary-item">
|
||||
<img src="/pc/images/icon_member-rank-delivery.png" alt="">
|
||||
<div class="member-rank-summary__summary-description">
|
||||
@@ -89,6 +90,7 @@
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
--%>
|
||||
</div>
|
||||
<c:if test="${sopmallInfo.shopInfo.cashAt eq 'N'}"> <%--충전형마일리지 사용야부에 따라 화면 위치 다름--%>
|
||||
<div class="member-rank-summary__summary-info">
|
||||
|
||||
@@ -9,12 +9,12 @@
|
||||
<spring:eval expression="@environment.getProperty('currency-unit.default')" var="curUnit"/>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<%-- 공통 include --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Include.jsp"/>
|
||||
</head>
|
||||
<c:choose>
|
||||
<c:when test = "${empty prevewVO.mainSiteInnb && prevewVO.evtPageAt ne 'Y'}"> <%--이벤트게시글 아님--%>
|
||||
<head>
|
||||
<%-- 공통 include --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Include.jsp"/>
|
||||
</head>
|
||||
<body>
|
||||
<%-- 공통 Header --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Header.jsp"/>
|
||||
@@ -1271,13 +1271,13 @@
|
||||
</div>
|
||||
</c:if>
|
||||
</div>
|
||||
<div class="quick-menu__customer-service">
|
||||
<i class="icon icon_quick-customer-service"></i>
|
||||
<span class="visually-hidden">고객센터</span>
|
||||
<span class="quick-menu__customer-service__num">
|
||||
${ fn:replace(resultMap.operAt.cscTelnb, '-', '<br>') }
|
||||
</span>
|
||||
</div>
|
||||
<%-- <div class="quick-menu__customer-service">--%>
|
||||
<%-- <i class="icon icon_quick-customer-service"></i>--%>
|
||||
<%-- <span class="visually-hidden">고객센터</span>--%>
|
||||
<%-- <span class="quick-menu__customer-service__num">--%>
|
||||
<%-- ${ fn:replace(resultMap.operAt.cscTelnb, '-', '<br>') }--%>
|
||||
<%-- </span>--%>
|
||||
<%-- </div>--%>
|
||||
<div class="quick-menu__to-top">
|
||||
<button><i class="icon icon_quick-to-top"></i><span class="visually-hidden">위로
|
||||
가기</span></button>
|
||||
|
||||
@@ -228,6 +228,10 @@
|
||||
<a class="login__misc__link" href="${accessUrl}/sopmal/mbr/selectIdPasswordSearch">아이디/비밀번호 찾기</a>
|
||||
</div>
|
||||
</form>
|
||||
<div class="login__signIn">
|
||||
<p class="login__signIn__text">아직 <span>${shopInfo.sopmalNm}</span> 회원이 아니세요?</p>
|
||||
<a class="login__signIn__link" href="${accessUrl}${'/sopmal/mbr/selectJoinGuidance'}">회원가입</a>
|
||||
</div>
|
||||
<div class="login__sns">
|
||||
<c:if test="${shopInfo.kakaoIntrlckAt == 'Y'}">
|
||||
<button type="button" class="login__sns__btn kakao" onclick="openSocialLoginPopup('kakao')"><i class="icon icon_kakaoLogin"></i>카카오
|
||||
|
||||
@@ -2977,6 +2977,7 @@
|
||||
<spring:eval expression="@environment.getProperty('spring.servlet.multipart.max-file-size')" var="maxFileSize"/>
|
||||
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.extensions.images')" var="acceptFileExtensions"/>
|
||||
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.cdnurl')" var="cdnurl"/>
|
||||
<spring:eval expression="@environment.getProperty('currency-unit.default')" var="curUnit"/>
|
||||
<input type="hidden" id="cdnurl" value="${cdnurl}"/>
|
||||
<section id="section01" class="content-section content-scroll-detect content-fold">
|
||||
<div class="content-fold__header">
|
||||
@@ -5071,7 +5072,7 @@
|
||||
</div>
|
||||
<div class="product-group__description">
|
||||
<p><c:out value="${goodsInfo.goodsNm}"/></p>
|
||||
<p class="product-group__description-price"><fmt:formatNumber value="${goodsInfo.slepric}" pattern="#,###"/>원</p>
|
||||
<p class="product-group__description-price"><fmt:formatNumber value="${goodsInfo.slepric}" pattern="#,###"/>${curUnit}</p>
|
||||
</div>
|
||||
</div>
|
||||
</c:forEach>
|
||||
|
||||
@@ -23,6 +23,8 @@
|
||||
|
||||
$('#appendList tr').each(function() {
|
||||
const goodsId = $(this).attr('id').replace('choiseListId', '');
|
||||
const goodsOptnInnb = $(this).find('input[name="goodsOptnInnb"]').val();
|
||||
const optnTy = $(this).find('input[name="optnTy"]').val();
|
||||
const goodsImg = $(this).find('input[name="goodsImgCours"]').val();
|
||||
const goodsNm = $(this).find('input[name="goodsNm"]').val();
|
||||
const goodsPrice = $(this).find('input[name="slepric"]').val();
|
||||
@@ -32,6 +34,8 @@
|
||||
if (goodsId) {
|
||||
selectedGoods.push({
|
||||
goodsId: goodsId,
|
||||
goodsOptnInnb: goodsOptnInnb,
|
||||
optnTy: optnTy,
|
||||
goodsImg: goodsImg,
|
||||
goodsNm: goodsNm,
|
||||
goodsPrice: goodsPrice,
|
||||
@@ -46,6 +50,8 @@
|
||||
var copyTr = $(this).clone();
|
||||
|
||||
var goodsId = $(this).find('input[name="goodsInnb"]').val();
|
||||
var goodsOptnInnb = $(this).find('input[name="goodsOptnInnb"]').val();
|
||||
var optnTy = $(this).find('input[name="optnTy"]').val();
|
||||
var goodsImg = $(this).find('input[name="goodsImgCours"]').val();
|
||||
var goodsNm = $(this).find('input[name="goodsNm"]').val();
|
||||
var goodsPrice = $(this).find('input[name="slepric"]').val();
|
||||
@@ -75,6 +81,8 @@
|
||||
|
||||
selectedGoods.push({
|
||||
goodsId: goodsId,
|
||||
goodsOptnInnb: goodsOptnInnb,
|
||||
optnTy: optnTy,
|
||||
goodsImg: goodsImg,
|
||||
goodsNm: goodsNm,
|
||||
goodsPrice: goodsPrice,
|
||||
@@ -151,6 +159,8 @@
|
||||
<tr class="searchList">
|
||||
<td class="text-left">
|
||||
<input type="hidden" id="goodsInnb" name="goodsInnb" value="<c:out value="${ list.goodsInnb }"/>"/>
|
||||
<input type="hidden" id="goodsOptnInnb" name="goodsOptnInnb" value="<c:out value="${ list.goodsOptnInnb }"/>"/>
|
||||
<input type="hidden" id="optnTy" name="optnTy" value="<c:out value="${ list.optnTy }"/>"/>
|
||||
<input type="hidden" id="goodsImgCours" name="goodsImgCours" value="<c:out value="${cdnurl}${ list.goodsImgCours }"/>"/>
|
||||
<input type="hidden" id="goodsNm" name="goodsNm" value="<c:out value="${ list.goodsNm }"/>"/>
|
||||
<input type="hidden" id="slepric" name="slepric" value="<fmt:parseNumber value="${ list.slepric }"/>"/>
|
||||
|
||||
877
src/main/webapp/WEB-INF/views/mngr/goods/subsvc/SubsvcC.jsp
Normal file
877
src/main/webapp/WEB-INF/views/mngr/goods/subsvc/SubsvcC.jsp
Normal file
@@ -0,0 +1,877 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui" %>
|
||||
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld" %>
|
||||
|
||||
<%--
|
||||
Class Name : SubsvcU.jsp
|
||||
Description : 구독서비스 상세
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2026-01-27 jazz 최초생성
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>일반 관리자</title>
|
||||
<%-- 공통 include --%>
|
||||
<%@ include file="/WEB-INF/views/comm/mngr/Include.jsp"%>
|
||||
</head>
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
//페이지 로드 시 숫자 인풋 정규화( 3자리 컴마)
|
||||
$('.input-text.number').each(function () {
|
||||
var input = $(this).val();
|
||||
$(this).val(input.replace(/[^0-9]/g, "").replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,"));
|
||||
});
|
||||
|
||||
const expsrSetTable = document.getElementById('expsrSet');
|
||||
//노출예약 체크되어있을 경우 enable 처리
|
||||
if($("input[name='expsrDvCd']:checked").val() ==='03'){
|
||||
enableTableInputs(expsrSetTable)
|
||||
}
|
||||
|
||||
const sopmalCd = $('#sopmalCd').val()
|
||||
fn_create_ckeditor('#subsvcDc', sopmalCd); //상세 설명 > 상품 설명 ck에디터 적용
|
||||
fn_create_ckeditor('#mblSubsvcDc', sopmalCd); // 모바일용 상세 설명 > 모바일용 상품 설명 ck에디터 적용
|
||||
/* 모바일용 상세 설명 설정 이벤트 */
|
||||
fn_handleMblSubsvcDcPcSameAt();
|
||||
|
||||
//모바일용 상세 설명 설정 이벤트 설정
|
||||
$('[name="mblSubsvcDcPcSameAt"]').on('change', fn_handleMblSubsvcDcPcSameAt);
|
||||
|
||||
//실판매가 자동계산 이벤트 등록
|
||||
$('[name="dlvyCnt"]').on('change', fn_cal_selpric);
|
||||
$('[name="subsvcCt"]').on('change', fn_cal_selpric);
|
||||
$('[name="tmeDlvyAmt"]').on('change', fn_cal_selpric);
|
||||
|
||||
//재고변경 시 가용재고 계산
|
||||
$('#invntryQy').on('change', fn_cal_availQt);
|
||||
//구독서비스명 변경 시 중복체크 초기화
|
||||
$('#subsvcNm').on('change', fn_initDupCheck);
|
||||
});
|
||||
|
||||
//숫자 인풋 포커스시 0 제거
|
||||
$(document).on("focus", '.input-text.number',function () {
|
||||
if(fn_nvl($(this).val(), '0') === '0'){
|
||||
$(this).val('');
|
||||
}
|
||||
});
|
||||
|
||||
//재고와 상관없이 판매일 경우 옵션재고 disabled
|
||||
$(document).on('change', 'input[name="invntryPolicyCd"]',function () {
|
||||
|
||||
let normalQy = $('input[name="invntryQy_normal"]');
|
||||
let invntryQy = $('input[name="invntryQy_invntry"]');
|
||||
let addeddQy = $('input[name="invntryQy_added"]');
|
||||
|
||||
if($(this).val() === '02'){
|
||||
normalQy.prop('disabled', true)
|
||||
invntryQy.prop('disabled', true)
|
||||
addeddQy.prop('disabled', true)
|
||||
}else{
|
||||
normalQy.prop('disabled', false)
|
||||
invntryQy.prop('disabled', false)
|
||||
addeddQy.prop('disabled', false)
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
//예약 판매설정 체크 해제시 예약상품 배송일자, 안내문구 빈값 처리
|
||||
$(document).on('click', '#goodsExpsrTy02', function () {
|
||||
if(!$(this).prop('checked')){
|
||||
$('#resveGoods input').val('')
|
||||
}
|
||||
})
|
||||
|
||||
//노출여부 노출예약이 아닐경우 노출 정보 빈값 처리
|
||||
$(document).on('click', 'input[name="expsrDvCd"]', function () {
|
||||
const target = $('#expsrDvCd3')
|
||||
if($(this).attr('id') !== target.attr('id')){
|
||||
$('#expsrSet input').val('')
|
||||
}
|
||||
})
|
||||
|
||||
//재고와 상관없이 판매일 경우 가용재고제한수량 빈값처리
|
||||
$(document).on('click', '#invntryPolicyCd2', function () {
|
||||
$('#avlinvLmttQy').val('')
|
||||
})
|
||||
|
||||
/* ********************************************************
|
||||
* 모바일용 상세설명 설정 enable-disable
|
||||
******************************************************** */
|
||||
function fn_handleMblSubsvcDcPcSameAt() {
|
||||
if($('[name="mblSubsvcDcPcSameAt"]:checked').val() === 'Y'){
|
||||
$('.mobileSubsvcCn').hide();
|
||||
}else{
|
||||
$('.mobileSubsvcCn').show();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* ********************************************************
|
||||
* 노출여부 enable-disable
|
||||
******************************************************** */
|
||||
function handleRadioClick2(radio) {
|
||||
//노출쳬약 객체
|
||||
const lastRadio = document.querySelector('#expsrDvCd3');
|
||||
const table = document.getElementById('expsrSet');
|
||||
|
||||
if (radio === lastRadio) {
|
||||
enableTableInputs(table);
|
||||
} else {
|
||||
disableTableInputs(table);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 재고에 따른 판매 enable-disable
|
||||
******************************************************** */
|
||||
function handleRadioClickDisable(radio) {
|
||||
const firstRadio = document.querySelector('input[name="invntryPolicyCd"]:first-of-type');
|
||||
const inputText = document.getElementById('avlinvLmttQy');
|
||||
|
||||
if (radio === firstRadio) {
|
||||
inputText.disabled = false;
|
||||
} else {
|
||||
inputText.disabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* enable-disable
|
||||
******************************************************** */
|
||||
function enableTableInputs(table) {
|
||||
const inputs = table.querySelectorAll('input');
|
||||
inputs.forEach(input => input.disabled = false);
|
||||
}
|
||||
|
||||
function disableTableInputs(table) {
|
||||
const inputs = table.querySelectorAll('input');
|
||||
inputs.forEach(input => input.disabled = true);
|
||||
}
|
||||
|
||||
function convertToDate(dateStr) {
|
||||
// 입력된 문자열을 Date 객체로 변환
|
||||
const date = new Date(dateStr);
|
||||
// 유효하지 않은 날짜인 경우 null 반환
|
||||
if (isNaN(date.getTime())) {
|
||||
return null;
|
||||
}
|
||||
return date;
|
||||
}
|
||||
|
||||
//시간을 분으로 변경하는 함수
|
||||
function timeToMinutes(timeStr) {
|
||||
// 시간과 분을 ':'를 기준으로 분리
|
||||
const [hours, minutes] = timeStr.split(':').map(Number);
|
||||
// 시간을 분으로 변환
|
||||
return hours * 60 + minutes;
|
||||
}
|
||||
|
||||
//마지막 컴마 지우기
|
||||
const remove_Last_Comma = function removeLastComma(str) {
|
||||
const lastCommaIndex = str.lastIndexOf(',');
|
||||
if (lastCommaIndex !== -1) {
|
||||
return str.substring(0, lastCommaIndex);
|
||||
} else {
|
||||
return str;
|
||||
}
|
||||
}
|
||||
|
||||
const fn_create_input = function (type, name, value, tgtForm) {
|
||||
const input = document.createElement('input');
|
||||
input.setAttribute("type", type);
|
||||
input.setAttribute("name", name);
|
||||
input.setAttribute("value", value);
|
||||
tgtForm.appendChild(input);
|
||||
}
|
||||
|
||||
|
||||
/* ********************************************************
|
||||
* 리스트 바로가기
|
||||
******************************************************** */
|
||||
const fn_select_list = function () {
|
||||
const url = '<c:url value="/mngr/goods/subsvc/selectSubsvcListForm"/>';
|
||||
|
||||
$('#subsvcForm').attr('action', url);
|
||||
$('#subsvcForm').attr('method', 'post');
|
||||
$('#subsvcForm').submit();
|
||||
};
|
||||
|
||||
//모든 컴마 삭제 및 문자를 숫자로 변환
|
||||
const fn_comma_del_str_to_number = function (str) {
|
||||
|
||||
// null이나 undefined인 경우 0을 반환
|
||||
if (str === null || str === undefined || str.trim() === '') {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 쉼표를 제거하고 숫자로 변환
|
||||
const numberWithoutCommas = str.replace(/,/g, '');
|
||||
const number = parseFloat(numberWithoutCommas);
|
||||
|
||||
// 변환된 값이 NaN인 경우 0을 반환
|
||||
if (isNaN(number)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return number;
|
||||
|
||||
}
|
||||
|
||||
/* 에러메세지 처리 */
|
||||
const fn_proc_error_message = function(data) {
|
||||
$('#overlay').fadeOut();
|
||||
|
||||
if (!data.responseJSON.resBody.message) {
|
||||
alert('<spring:message code="error.internal-server"/>');
|
||||
} else {
|
||||
if (fn_check_json(data.responseJSON.resBody.message)) {
|
||||
const errorObject = JSON.parse(data.responseJSON.resBody.message);
|
||||
|
||||
if (!errorObject) {
|
||||
alert('<spring:message code="error.internal-server"/>');
|
||||
} else {
|
||||
if (!errorObject.errorMsg) {
|
||||
alert('<spring:message code="error.internal-server"/>');
|
||||
} else {
|
||||
alert(errorObject.errorMsg);
|
||||
|
||||
let isMtched = false;
|
||||
|
||||
$('.main').eq(0).find('input, select, textarea').each(function () {
|
||||
for (let idx = 0; idx < errorObject.errorFields.length; idx++) {
|
||||
const name = $(this).prop('name');
|
||||
|
||||
if (!fn_is_empty(name)) {
|
||||
if (errorObject.errorFields[idx].indexOf(name) >= 0) {
|
||||
isMtched = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isMtched) {
|
||||
$(this).focus();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (data.responseJSON.resBody.message) {
|
||||
alert(data.responseJSON.resBody.message);
|
||||
} else {
|
||||
alert('<spring:message code="error.internal-server"/>');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//상품이미지 삭제
|
||||
const deleteFileImg = function (obj) {
|
||||
$("#delImg").val($("#img").val());
|
||||
|
||||
$(obj).parent('div.file-preview').parent('div.file-preview__container').remove()
|
||||
}
|
||||
|
||||
/*실판매가 자동계산*/
|
||||
const fn_cal_selpric = function(){
|
||||
var dlvyCnt = $('#dlvyCnt'); //배송횟수
|
||||
var subsvcCt = $('#subsvcCt'); //구독료
|
||||
var tmeDlvyAmt = $('#tmeDlvyAmt'); //1회 배송비
|
||||
var selpric = $('#selpric'); //1회 배송비
|
||||
selpric.val(((Number(dlvyCnt.val().replace(/,/g, '')) * Number(tmeDlvyAmt.val().replace(/,/g, ''))) + Number(subsvcCt.val().replace(/,/g, ''))).toLocaleString());
|
||||
}
|
||||
|
||||
/*가용재고 자동계산*/
|
||||
const fn_cal_availQt = function(){
|
||||
var invntryQy = $('#invntryQy');
|
||||
var usefulInvntryQy = $('#usefulInvntryQy');
|
||||
var availQt = $('#availQt');
|
||||
availQt.val(Number(invntryQy.val().replace(/,/g, '')) - Number(usefulInvntryQy.val().replace(/,/g, '')));
|
||||
}
|
||||
|
||||
/** 중복체크 초기화*/
|
||||
const fn_initDupCheck = function (){
|
||||
$('#dupCheck').val('false');
|
||||
}
|
||||
|
||||
/** 제약조건 체크 */
|
||||
const validate = function(){
|
||||
var retVal = true;
|
||||
//에디터내용을 textarea로 복사
|
||||
var subsvcDc = $('#subsvcDc');
|
||||
subsvcDc.val(fn_get_editor_data('#subsvcDc'));
|
||||
|
||||
//구독서비스명 중복확인
|
||||
var dupCheck = $('#dupCheck');
|
||||
if(typeof dupCheck.val() != 'undefined' && dupCheck.val() == 'false'){
|
||||
alert('구독서비스명 중복확인이 필요합니다.');
|
||||
return false;
|
||||
}
|
||||
// 텍스트 입력 내용중 필수 항목 체크
|
||||
$(':text[required]').each(function () {
|
||||
if($(this).hasClass('number')){
|
||||
if ($(this).val().trim() == '' || $(this).val().trim() == '0') {
|
||||
alert($(this).prop('title')+"은(는) 필수입니다");
|
||||
$(this).focus();
|
||||
retVal = false;
|
||||
return false;
|
||||
}
|
||||
}else{
|
||||
if ($(this).val().trim() == '') {
|
||||
alert($(this).prop('title')+"은(는) 필수입니다");
|
||||
$(this).focus();
|
||||
retVal = false;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
});
|
||||
if(!retVal){
|
||||
return retVal;
|
||||
}
|
||||
|
||||
//노출예약 인 경우 노출기간 필수
|
||||
if($('input[name="expsrDvCd"]:checked').val() == '03'){
|
||||
if($('#expsrBgnDt_dt').val().trim() == ''){
|
||||
alert($('#expsrBgnDt_dt').prop('title')+"은(는) 노출여부가 노출예약인 경우 필수입니다");
|
||||
$('#expsrBgnDt_dt').focus();
|
||||
return false;
|
||||
}
|
||||
if($('#expsrBgnDt_time').val().trim().replaceAll(':','') == ''){
|
||||
alert($('#expsrBgnDt_time').prop('title')+"은(는) 노출여부가 노출예약인 경우 필수입니다");
|
||||
$('#expsrBgnDt_time').focus();
|
||||
return false;
|
||||
}
|
||||
if($('#expsrEndDt_dt').val().trim() == ''){
|
||||
alert($('#expsrEndDt_dt').prop('title')+"은(는) 노출여부가 노출예약인 경우 필수입니다");
|
||||
$('#expsrEndDt_dt').focus();
|
||||
return false;
|
||||
}
|
||||
if($('#expsrEndDt_time').val().trim().replaceAll(':','') == ''){
|
||||
alert($('#expsrEndDt_time').prop('title')+"은(는) 노출여부가 노출예약인 경우 필수입니다");
|
||||
$('#expsrEndDt_time').focus();
|
||||
return false;
|
||||
}
|
||||
// 노출기간 셋팅
|
||||
const expsrBgnDt = $('#expsrBgnDt_dt').val() + ' ' +$('#expsrBgnDt_time').val() +':00'
|
||||
const expsrEndDt = $('#expsrEndDt_dt').val() + ' ' +$('#expsrEndDt_time').val() +':00'
|
||||
|
||||
$('#expsrBgnDt').val(expsrBgnDt);
|
||||
$('#expsrEndDt').val(expsrEndDt);
|
||||
}
|
||||
|
||||
//재고가 있으면 판매인 경우 개수 품절처리 필수
|
||||
if($('input[name="invntryPolicyCd"]:checked').val() == '01'){
|
||||
if($('#avlinvLmttQy').val() == ''){
|
||||
alert($('#avlinvLmttQy').prop('title')+"은(는) 노출여부가 노출예약인 경우 필수입니다");
|
||||
$('#avlinvLmttQy').focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//이미지 필수 체크
|
||||
if(imgDropzone.files.length != 1){
|
||||
if(imgDropzone.files.length == 0){
|
||||
alert("대표이미지(섬네일)은(는) 필수입니다");
|
||||
}else{
|
||||
alert("대표이미지(섬네일)은(는) 1개만 등록가능합니다");
|
||||
}
|
||||
$('#img-dropzone')[0].scrollIntoView();
|
||||
// $('#img-dropzone').focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
//상품설명 필수체크
|
||||
if(subsvcDc.val() == ''){
|
||||
alert(subsvcDc.prop('title')+"은(는) 필수입니다");
|
||||
CKEditorArray['#subsvcDc'].editing.view.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
//PC와 모바일 다르게 설정인 경우 모바일 상품설명 필수
|
||||
if($('input[name="mblSubsvcDcPcSameAt"]:checked').val() == 'N'){
|
||||
var mblSubsvcDc = $('#mblSubsvcDc');
|
||||
mblSubsvcDc.val(fn_get_editor_data('#mblSubsvcDc'));
|
||||
if(mblSubsvcDc.val().trim() == ''){
|
||||
alert(mblSubsvcDc.prop('title')+"은(는) 필수입니다");
|
||||
CKEditorArray['#mblSubsvcDc'].editing.view.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/** 등록하기*/
|
||||
const fn_updateSubsvc = function (){
|
||||
if(!validate()){
|
||||
return false;
|
||||
}
|
||||
|
||||
const url = '<c:url value="/mngr/goods/subsvc/insertSubsvc"/>';
|
||||
var formData = new FormData($('#subsvcForm')[0]);
|
||||
|
||||
imgDropzone.files.forEach(function(file, index){
|
||||
console.log("file",file);
|
||||
//1개만 등록 되도록
|
||||
if(index == 0){
|
||||
formData.append('files',file);
|
||||
}
|
||||
});
|
||||
|
||||
console.log("formData",formData);
|
||||
|
||||
if (confirm(`구독서비스를 <spring:message code="confirm.common.insert"/>`)) {
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
enctype: 'multipart/form-data',
|
||||
url: url,
|
||||
data: formData,
|
||||
contentType: false,
|
||||
processData: false,
|
||||
success: function (data) {
|
||||
try{
|
||||
const message = JSON.parse(data.resBody.result).message;
|
||||
if(message == "success"){
|
||||
alert('<spring:message code="success.common.insert"/>');
|
||||
//등록 후 목록화면으로 이동
|
||||
fn_select_list();
|
||||
} else {
|
||||
alert('<spring:message code="fail.common.insert"/>');
|
||||
}
|
||||
}catch (e) {
|
||||
alert('<spring:message code="fail.common.insert"/>');
|
||||
console.log(e);
|
||||
}
|
||||
},
|
||||
error: function (request, status, error) {
|
||||
alert('<spring:message code="fail.common.insert"/>');
|
||||
console.log(error);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/** 구독서비스 명칭 중복확인 */
|
||||
fn_subsvcNmDupCheck = function (subsvcNm){
|
||||
const url = '<c:url value="/mngr/goods/subsvc/selectSubsvcNmDupCheck"/>';
|
||||
|
||||
if(subsvcNm.val().trim() == ''){
|
||||
alert('구독서비스명을 입력해주세요.');
|
||||
return false;
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: url,
|
||||
data: {
|
||||
'subsvcNm': subsvcNm.val()
|
||||
},
|
||||
success: function (data) {
|
||||
try{
|
||||
const message = JSON.parse(data.resBody.result).message;
|
||||
if(message == "success"){
|
||||
alert('사용가능한 구독서비스입니다.');
|
||||
$('#dupCheck').val('true');
|
||||
//check 컬럼에 true 등록
|
||||
} else {
|
||||
alert('동일한 구독서비스가 있습니다.');
|
||||
$('#dupCheck').val('false');
|
||||
//check 컬럼에 false 등록
|
||||
}
|
||||
}catch (e) {
|
||||
alert('<spring:message code="fail.common.select"/>');
|
||||
//check 컬럼에 false 등록
|
||||
console.log(e);
|
||||
}
|
||||
},
|
||||
error: function (request, status, error) {
|
||||
alert('<spring:message code="fail.common.select"/>');
|
||||
console.log(error);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
</script>
|
||||
<body>
|
||||
<%@ include file="/WEB-INF/views/comm/mngr/Header.jsp"%>
|
||||
<main class="main">
|
||||
<%@ include file="/WEB-INF/views/comm/mngr/Left.jsp"%>
|
||||
<div class="content">
|
||||
<div class="content__inner">
|
||||
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
|
||||
<div class="page-title">
|
||||
<h2 class="page-title__title">
|
||||
구독서비스 등록
|
||||
</h2>
|
||||
<div class="page-title__btn-container">
|
||||
<button onclick="fn_select_list();" class="btn outline"><spring:message code="button.list"/></button>
|
||||
<button onclick="fn_updateSubsvc();return false;" class="btn primary"><spring:message code="button.insert"/></button>
|
||||
</div>
|
||||
</div>
|
||||
<form id="subsvcForm" method="post" action="" enctype="multipart/form-data">
|
||||
<input type="hidden" id="subsvcInnb" name="subsvcInnb" value="">
|
||||
<input type="hidden" id="sopmalCd" name="sopmalCd" value="${resultMap.paramVO.sopmalCd}">
|
||||
<input type="hidden" id="srchSelSubsvcNm" name="srchSelSubsvcNm" value="${resultMap.paramVO.srchSelSubsvcNm}">
|
||||
<input type="hidden" id="srchSubsvcNm" name="srchSubsvcNm" value="${resultMap.paramVO.srchSubsvcNm}">
|
||||
<input type="hidden" id="srchSelSubsvcGnr" name="srchSelSubsvcGnr" value="${resultMap.paramVO.srchSelSubsvcGnr}">
|
||||
<input type="hidden" id="srchSubsvcGnrNm" name="srchSubsvcGnrNm" value="${resultMap.paramVO.srchSubsvcGnrNm}">
|
||||
<c:forEach items="${resultMap.paramVO.srchArrSubsvcSttusCd}" var="srchSubsvcSttusCd" varStatus="status">
|
||||
<input type="hidden" id="srchArrSubsvcSttusCd${status.count}" name="srchArrSubsvcSttusCd" value="${srchSubsvcSttusCd}">
|
||||
</c:forEach>
|
||||
<input type="hidden" id="srchExpsrDvCd" name="srchExpsrDvCd" value="${resultMap.paramVO.srchExpsrDvCd}">
|
||||
<input type="hidden" id="sortDv" name="sortDv" value="${resultMap.paramVO.sortDv}">
|
||||
<input type="hidden" id="pageIndex" name="pageIndex" value="${ resultMap.paramVO.pageIndex }"/>
|
||||
<input type="hidden" id="pageUnit" name="pageUnit" value="${ resultMap.paramVO.pageUnit }">
|
||||
<input type="hidden" id="delImg" name="delImg" value="">
|
||||
<input type="hidden" id="expsrBgnDt" name="expsrBgnDt" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.expsrBgnDt}</c:if>">
|
||||
<input type="hidden" id="expsrEndDt" name="expsrEndDt" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.expsrBgnDt}</c:if>">
|
||||
<input type="hidden" id="usefulInvntryQy" name="usefulInvntryQy" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.usefulInvntryQy}</c:if>">
|
||||
<spring:eval expression="@environment.getProperty('spring.servlet.multipart.max-file-size')" var="maxFileSize"/>
|
||||
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.extensions.images')" var="acceptFileExtensions"/>
|
||||
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.cdnurl')" var="cdnurl"/>
|
||||
<input type="hidden" id="cdnurl" value="${cdnurl}"/>
|
||||
|
||||
<section id="section01" class="content-section content-scroll-detect content-fold">
|
||||
<div class="content-fold__header">
|
||||
<h3 class="content-section__title">기본정보</h3>
|
||||
<button class="content-fold__btn"><span class="visually-hidden">접기</span></button>
|
||||
</div>
|
||||
<div class="content-fold__content">
|
||||
<div class="table-wrapper">
|
||||
<table class="table">
|
||||
<caption>기본정보</caption>
|
||||
<colgroup>
|
||||
<col style="width: 12%;">
|
||||
<col style="width: 38%">
|
||||
<col style="width: 12%;">
|
||||
<col style="width: 38%">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>구독서비스명<span class="red-7">*</span></th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text lg" type="text" title="구독서비스명" id="subsvcNm" name="subsvcNm" maxlength="100" value="${resultMap.subsvcDtl.subsvcNm}" <c:if test='${resultMap.subsvcDtl != null}'>readonly</c:if> required>
|
||||
<c:if test='${resultMap.subsvcDtl == null}'>
|
||||
<button type="button" id="dupCheckButton" onclick="fn_subsvcNmDupCheck($('#subsvcNm'));return false;" class="btn xsm gray ml-5">중복확인</button>
|
||||
<input type="hidden" id="dupCheck" name="dupCheck" value="false">
|
||||
</c:if>
|
||||
</div>
|
||||
</td>
|
||||
<th>구독기간<span class="red-7">*</span></th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text xsm number text-right" type="text" title="구독기간" id="subPd" name="subPd" maxlength="3" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.subPd}</c:if>" required> 개월
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>기수</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text xsm number text-right" type="text" title="기수" id="subsvcGnr" name="subsvcGnr" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.subsvcNextGnr}</c:if><c:if test='${resultMap.subsvcDtl == null}'>1</c:if>" readonly> 기
|
||||
</div>
|
||||
</td>
|
||||
<th>기수명<span class="red-7">*</span></th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text lg" type="text" title="기수명" id="subsvcGnrNm" name="subsvcGnrNm" maxlength="80" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.subsvcGnrNm}</c:if>" required>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>배송횟수<span class="red-7">*</span></th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text xsm number text-right" type="text" title="배송횟수" id="dlvyCnt" name="dlvyCnt" maxlength="3" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.dlvyCnt}</c:if>" required> 회
|
||||
</div>
|
||||
</td>
|
||||
<th>배송주기<span class="red-7">*</span></th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text sm" type="text" title="배송주기" id="dlvyCycle" name="dlvyCycle" maxlength="30" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.dlvyCycle}</c:if>" required>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section id="section02" class="content-section content-scroll-detect content-fold">
|
||||
<div class="content-fold__header">
|
||||
<h3 class="content-section__title">판매정보</h3>
|
||||
<button class="content-fold__btn"><span class="visually-hidden">접기</span></button>
|
||||
</div>
|
||||
<div class="content-fold__content">
|
||||
<div class="table-wrapper">
|
||||
<table class="table">
|
||||
<caption>판매정보</caption>
|
||||
<colgroup>
|
||||
<col style="width: 12%;">
|
||||
<col style="width: 38%">
|
||||
<col style="width: 12%;">
|
||||
<col style="width: 38%">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>구독료<span class="red-7">*</span></th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text sm number text-right" type="text" title="구독료" id="subsvcCt" name="subsvcCt" maxlength="11" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.subsvcCt}</c:if>" required> 円(엔)
|
||||
</div>
|
||||
</td>
|
||||
<th>1회 배송비<span class="red-7">*</span></th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text sm number text-right" type="text" title="1회 배송비" id="tmeDlvyAmt" name="tmeDlvyAmt" maxlength="11" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.tmeDlvyAmt}</c:if>" required> 円(엔)
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>소비자가</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text sm number text-right" type="text" title="소비자가" id="cnsmrpric" name="cnsmrpric" maxlength="11" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.cnsmrpric}</c:if>"> 円(엔)
|
||||
</div>
|
||||
</td>
|
||||
<th>실판매가<span class="red-7">*</span></th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text sm number text-right" type="text" title="실판매가" id="selpric" name="selpric" maxlength="11" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.selpric}</c:if>" readonly> 円(엔)
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section id="section03" class="content-section content-scroll-detect content-fold">
|
||||
<div class="content-fold__header">
|
||||
<h3 class="content-section__title">구독설정</h3>
|
||||
<button type="button" class="content-fold__btn"><span class="visually-hidden">접기</span></button>
|
||||
</div>
|
||||
<div class="content-fold__content">
|
||||
<div class="table-wrapper">
|
||||
<table class="table">
|
||||
<caption>구독설정</caption>
|
||||
<colgroup>
|
||||
<col style="width: 12%;">
|
||||
<col>
|
||||
<col style="width: 12%;">
|
||||
<col>
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>재고<span class="red-7">*</span></th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text sm number text-right" type="text" title="재고" id="invntryQy" name="invntryQy" maxlength="11" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.invntryQy}</c:if>" required>
|
||||
</div>
|
||||
</td>
|
||||
<th>가용재고</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text sm number text-right" type="text" title="가용재고" id="availQt" maxlength="11" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.availQt}</c:if>" readonly>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>판매 상태</th>
|
||||
<td colspan="2">
|
||||
<div class="td-inner">
|
||||
<div class="custom-radio-container">
|
||||
<c:forEach items="${resultMap.subsvcSttusList}" var="subsvcSttus" varStatus="status">
|
||||
<div class="custom-radio">
|
||||
<input type="radio" id="subsvcSttusCd${status.count}" name="subsvcSttusCd" title="판매 상태" value="${subsvcSttus.cd}" <c:if test="${resultMap.subsvcDtl.subsvcSttusCd eq subsvcSttus.cd}">checked</c:if>/>
|
||||
<label for="subsvcSttusCd${status.count}">${subsvcSttus.cdNm}</label>
|
||||
<input type="hidden" value="${resultMap.subsvcDtl.subsvcSttusCd}" id="subsvcSttusCdChk"/>
|
||||
</div>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>노출 여부</th>
|
||||
<td colspan="3">
|
||||
<div class="td-inner vertical">
|
||||
<div class="custom-radio-container mt-10">
|
||||
<c:forEach items="${resultMap.expsrDvList}" var="expsrDv" varStatus="status">
|
||||
<div class="custom-radio">
|
||||
<input type="radio" id="expsrDvCd${status.count}" name="expsrDvCd" title="노출 여부" value="${expsrDv.cd}" onclick="handleRadioClick2(this);" <c:if test="${resultMap.subsvcDtl.expsrDvCd eq expsrDv.cd}">checked</c:if>/>
|
||||
<label for="expsrDvCd${status.count}">${expsrDv.cdNm}</label>
|
||||
<input type="hidden" value="${resultMap.subsvcDtl.expsrDvCd}" id="expsrDvCdChk"/>
|
||||
</div>
|
||||
</c:forEach>
|
||||
</div>
|
||||
<div class="table-wrapper mt-10">
|
||||
<table class="table">
|
||||
<caption>노출 기간</caption>
|
||||
<colgroup>
|
||||
<col style="width: 16%;">
|
||||
<col>
|
||||
</colgroup>
|
||||
<tbody id="expsrSet">
|
||||
<tr>
|
||||
<th>노출 기간</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input type="text" id="expsrBgnDt_dt" class="datepicker" title="시작 날짜 선택" autocomplete="off" value="${fn:split(resultMap.subsvcDtl.expsrBgnDt,' ')[0]}" disabled>
|
||||
<div class="timepicker-container">
|
||||
<input type="text" class="bs-timepicker" id="expsrBgnDt_time" title="시작 시간 설정" value="${fn:split(fn:split(resultMap.subsvcDtl.expsrBgnDt,' ')[1], ':')[0]}:${fn:split(fn:split(resultMap.subsvcDtl.expsrBgnDt,' ')[1], ':')[1]}" disabled>
|
||||
</div>
|
||||
<span class="tilde">~</span>
|
||||
<input type="text" id="expsrEndDt_dt" class="datepicker" title="종료 날짜 선택" autocomplete="off" value="${fn:split(resultMap.subsvcDtl.expsrEndDt,' ')[0]}" disabled>
|
||||
<div class="timepicker-container">
|
||||
<input type="text" class="bs-timepicker" id="expsrEndDt_time" title="종료 시간 설정" value="${fn:split(fn:split(resultMap.subsvcDtl.expsrEndDt,' ')[1], ':')[0]}:${fn:split(fn:split(resultMap.subsvcDtl.expsrEndDt,' ')[1], ':')[1]}" disabled>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>재고에 따른 판매</th>
|
||||
<td colspan="3">
|
||||
<div class="td-inner">
|
||||
<div class="custom-radio-container">
|
||||
<c:forEach items="${resultMap.invntryPolicyList}" var="invntryPolicy" varStatus="status">
|
||||
<div class="custom-radio">
|
||||
<input type="radio" id="invntryPolicyCd${status.count}" name="invntryPolicyCd" value="${invntryPolicy.cd}" onclick="handleRadioClickDisable(this);"<c:if test="${resultMap.subsvcDtl.invntryPolicyCd eq invntryPolicy.cd}">checked</c:if>/>
|
||||
<label for="invntryPolicyCd${status.count}">${invntryPolicy.cdNm}</label>
|
||||
</div>
|
||||
<c:if test="${status.first}">
|
||||
<div>
|
||||
<span class="ml-4">(</span>
|
||||
<input class="input-text number xsm ml-5 right" id="avlinvLmttQy" name="avlinvLmttQy" value="${resultMap.subsvcDtl.avlinvLmttQy}" type="text" title="해당 인풋에 대한 설명" <c:if test="${resultMap.subsvcDtl.invntryPolicyCd eq '02'}"> disabled</c:if> />
|
||||
개 이하 일 때 품절 처리
|
||||
<span class="ml-4">)</span>
|
||||
</div>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section id="section07" class="content-section content-scroll-detect content-fold">
|
||||
<div class="content-fold__header">
|
||||
<h3 class="content-section__title">구독서비스 설명</h3>
|
||||
<button class="content-fold__btn"><span class="visually-hidden">접기</span></button>
|
||||
</div>
|
||||
<div class="content-fold__content">
|
||||
<div class="table-wrapper">
|
||||
<table class="table">
|
||||
<caption>구독서비스 설명</caption>
|
||||
<colgroup>
|
||||
<col style="width: 12%;">
|
||||
<col>
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>대표이미지(썸네일) 등록<span class="red-7">*</span></th>
|
||||
<td>
|
||||
<div class="td-inner vertical">
|
||||
<div class="dropzone-wrapper">
|
||||
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.extensions.images')" var="acceptFileExtensions"/>
|
||||
<div class="dropzone" id="img-dropzone">
|
||||
</div><p class="fyi gray-7 mt-15">1개의 이미지만 등록가능합니다.</p>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>상품 설명<span class="red-7">*</span></th>
|
||||
<td>
|
||||
<div class="td-inner"><textarea class="textarea" title="상품 설명" cols="30" rows="10" id="subsvcDc" name="subsvcDc">${resultMap.subsvcDtl.subsvcDc}</textarea>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>모바일용 상세 설명 설정</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="custom-radio-container mr-5">
|
||||
<div class="custom-radio">
|
||||
<input type="radio" id="mblSubsvcDcPcSameAt1" name="mblSubsvcDcPcSameAt" value="Y" <c:if test="${ resultMap.subsvcDtl.mblSubsvcDcPcSameAt eq 'Y'}">checked</c:if>>
|
||||
<label for="mblSubsvcDcPcSameAt1">PC와 동일</label>
|
||||
</div>
|
||||
<div class="custom-radio">
|
||||
<input type="radio" id="mblSubsvcDcPcSameAt2" name="mblSubsvcDcPcSameAt" value="N" <c:if test="${ resultMap.subsvcDtl.mblSubsvcDcPcSameAt eq 'N'}">checked</c:if>>
|
||||
<label for="mblSubsvcDcPcSameAt2">PC와 모바일 다르게 설정</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="mobileSubsvcCn">
|
||||
<th>모바일용 상세 설명<span class="red-7">*</span></th>
|
||||
<td>
|
||||
<div class="td-inner"><textarea class="textarea" title="모바일용 상품 설명" cols="30" rows="10" id="mblSubsvcDc" name="mblSubsvcDc">${resultMap.subsvcDtl.mblSubsvcDc}</textarea>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</form>
|
||||
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="modalDiv">
|
||||
|
||||
</div>
|
||||
<%--관리자 수정이력 내역보기 모달 --%>
|
||||
<div id="logDiv"></div>
|
||||
</main>
|
||||
<script>
|
||||
// Dropzone 파일업로드
|
||||
if ($("#img-dropzone").length > 0) {
|
||||
Dropzone.autoDiscover = false;
|
||||
var imgDropzone = new Dropzone("#img-dropzone", {
|
||||
url: "/file-upload",
|
||||
maxFiles: 1,
|
||||
maxFilesize: 20,
|
||||
autoProcessQueue: false,
|
||||
addRemoveLinks: true,
|
||||
dictDefaultMessage: "클릭하거나 파일을 여기로 드래그하세요",
|
||||
dictRemoveFile: "삭제",
|
||||
acceptedFiles: "${acceptFileExtensions}",
|
||||
dictCancelUpload: "취소",
|
||||
dictCancelUploadConfirmation: "업로드를 취소하시겠습니까?",
|
||||
dictInvalidFileType: "이 파일은 업로드할 수 없습니다.",
|
||||
dictFileTooBig: "파일이 너무 큽니다. ({{filesize}}MB). 최대 파일 크기: {{maxFilesize}}MB.",
|
||||
dictMaxFilesExceeded: "파일을 더 이상 추가할 수 없습니다.",
|
||||
dictResponseError: "서버에서 응답을 받지 못했습니다.",
|
||||
});
|
||||
}
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
137
src/main/webapp/WEB-INF/views/mngr/goods/subsvc/SubsvcList.jsp
Normal file
137
src/main/webapp/WEB-INF/views/mngr/goods/subsvc/SubsvcList.jsp
Normal file
@@ -0,0 +1,137 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui" %>
|
||||
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld" %>
|
||||
|
||||
<%--
|
||||
Class Name : SubsvcList.jsp
|
||||
Description : 구독서비스 목록 조회 리스트
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2026-02-05 jazz 최초 생성
|
||||
--%>
|
||||
<section class="content-section">
|
||||
<div class="form-control-container">
|
||||
<div class="left">
|
||||
<div class="search-number">
|
||||
<span class="search-number__text">총 <strong><c:out value="${ resultMap.paginationInfo.totalRecordCount }"/></strong>건</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="center">
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="select-box">
|
||||
<select title="정렬순" name="sortDvView" id="sortDvView" onchange="fn_select_list(1);return false;">
|
||||
<option value="subsvcGnrAsc" <c:if test="${resultMap.paramVO.sortDv eq 'subsvcGnrAsc'}">selected="selected"</c:if>>구독서비스+기수 오름차순</option>
|
||||
<option value="subsvcGnrDesc" <c:if test="${resultMap.paramVO.sortDv eq 'subsvcGnrDesc'}">selected="selected"</c:if>>구독서비스+기수 내림차순</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="select-box">
|
||||
<select id="pageUnitView" name="pageUnitView" title="페이지당 출력될 목록건수" onchange="fn_select_list(1,this.value);return false;">
|
||||
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
|
||||
<option value="<c:out value="${ pageUnit }"/>"
|
||||
<c:if test="${ resultMap.paginationInfo.recordCountPerPage eq pageUnit}">selected="selected"</c:if>>
|
||||
<c:out value="${ pageUnit }"/>개씩
|
||||
</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="horizontal-line">
|
||||
<div class="form-control-container">
|
||||
<div class="left">
|
||||
<button class="btn dark sm" onclick="fn_delete_check();return false;">선택 삭제</button>
|
||||
</div>
|
||||
<div class="center">
|
||||
</div>
|
||||
</div>
|
||||
<hr class="spacing">
|
||||
<div class="table-wrapper">
|
||||
<table class="table vertical">
|
||||
<caption>구독서비스 목록</caption>
|
||||
<colgroup>
|
||||
<col style="width: 4%;">
|
||||
<col style="width: 4%;">
|
||||
<col style="width: 12%;">
|
||||
<col style="width: 7%;">
|
||||
<col style="width: 12%;">
|
||||
<col style="width: 7%;">
|
||||
<col style="width: 6%;">
|
||||
<col style="width: 6%;">
|
||||
<col style="width: 7%;">
|
||||
<col style="width: 7%;">
|
||||
<col style="width: 7%;">
|
||||
<col style="width: 7%;">
|
||||
<col style="width: 7%;">
|
||||
<col style="width: 7%;">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
<label class="b-checkbox checkbox is-medium">
|
||||
<input type="checkbox" id="checkAll" value="">
|
||||
<span class="check"></span>
|
||||
</label>
|
||||
</th>
|
||||
<th>번호</th>
|
||||
<th>구독서비스</th>
|
||||
<th>기수</th>
|
||||
<th>기수명</th>
|
||||
<th>배송횟수</th>
|
||||
<th>재고</th>
|
||||
<th>가용재고</th>
|
||||
<th>판매상태</th>
|
||||
<th>노출여부</th>
|
||||
<th>구독료</th>
|
||||
<th>1회배송비</th>
|
||||
<th>소비자가</th>
|
||||
<th>실판매가</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<c:choose>
|
||||
<c:when test="${ not empty resultMap.list }">
|
||||
<c:forEach items="${ resultMap.list }" var="subsvc" varStatus="status">
|
||||
<tr>
|
||||
<td>
|
||||
<label class="b-checkbox checkbox is-medium check-all">
|
||||
<input type="checkbox" name="arrSubsvcInnb" class="subsvcInnb" value="${subsvc.subsvcInnb}">
|
||||
<span class="check"></span>
|
||||
</label>
|
||||
</td>
|
||||
<td><c:out value="${ resultMap.paginationInfo.totalRecordCount - subsvc.rnum + 1 }" /></td>
|
||||
<td><a onclick="fn_move_subsvc_dtl(<c:out value="${subsvc.subsvcInnb}"/>)" class="under-line"><c:out value="${subsvc.subsvcNm}"/></a></td>
|
||||
<td><c:out value="${subsvc.subsvcGnr}"/>기 <button class="btn xsm outline" type="button" onclick="fn_move_subsvc_copy(<c:out value="${subsvc.subsvcInnb}"/>)"><spring:message code="button.copy"/> </button></td>
|
||||
<td><c:out value="${subsvc.subsvcGnrNm}"/></td>
|
||||
<td><c:out value="${subsvc.dlvyCnt}"/>회</td>
|
||||
<td><fmt:formatNumber value="${subsvc.invntryQy}" pattern="#,###"/></td>
|
||||
<td><fmt:formatNumber value="${subsvc.availQt}" pattern="#,###"/></td>
|
||||
<td><c:out value="${subsvc.subsvcSttus}"/></td>
|
||||
<td><c:out value="${subsvc.expsrDv}"/></td>
|
||||
<td><fmt:formatNumber value="${subsvc.subsvcCt}" pattern="#,###"/></td>
|
||||
<td><fmt:formatNumber value="${subsvc.tmeDlvyAmt}" pattern="#,###"/></td>
|
||||
<td><fmt:formatNumber value="${subsvc.cnsmrpric}" pattern="#,###"/></td>
|
||||
<td><fmt:formatNumber value="${subsvc.selpric}" pattern="#,###"/></td>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<tr>
|
||||
<td colspan="100%"><spring:message code="common.nodata"/></td>
|
||||
</tr>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="pagination__container">
|
||||
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_list"/>
|
||||
</div>
|
||||
@@ -0,0 +1,449 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui" %>
|
||||
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld" %>
|
||||
|
||||
<%--
|
||||
Class Name : SubsvcListForm.jsp
|
||||
Description : 구독서비스 목록 조회 폼
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2026-02-05 jazz 최초 생성
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>일반 관리자</title>
|
||||
<%@ include file="/WEB-INF/views/comm/mngr/Include.jsp"%>
|
||||
|
||||
</head>
|
||||
<script>
|
||||
var initFlag = true;
|
||||
$(document).ready(function () {
|
||||
let pageIndex = $("#pageIndex").val();
|
||||
let pageUnit = $("#pageUnit").val();
|
||||
let srchSelSubsvcNm = $('#srchSelSubsvcNm').val();
|
||||
// event 제어
|
||||
fn_event();
|
||||
|
||||
if(srchSelSubsvcNm != ''){
|
||||
fn_getsubsvcGnr(srchSelSubsvcNm);
|
||||
}else{
|
||||
// 목록 조회
|
||||
fn_select_list(pageIndex, pageUnit);
|
||||
}
|
||||
|
||||
// 엔터키 검색
|
||||
$('#listForm').on('keydown', function (event) {
|
||||
if (event.keyCode === 13) {
|
||||
event.preventDefault();
|
||||
fn_select_list(1);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/*********************************************************
|
||||
* 목록 조회
|
||||
******************************************************** */
|
||||
const fn_select_list = function (pageIndex, pageUnit) {
|
||||
let dataStr;
|
||||
|
||||
if (!pageIndex) {
|
||||
$('#pageIndex').val(1);
|
||||
} else {
|
||||
$('#pageIndex').val(pageIndex);
|
||||
}
|
||||
//정렬기준 셋팅
|
||||
if(typeof $('#sortDvView') !== undefined && $('#sortDvView').val() !== undefined){
|
||||
$('#sortDv').val($('#sortDvView').val());
|
||||
}
|
||||
//한페이지 목록개수 셋팅
|
||||
if(typeof $('#pageUnitView') !== undefined && $('#pageUnitView').val() !== undefined){
|
||||
$('#pageUnit').val($('#pageUnitView').val());
|
||||
}
|
||||
|
||||
if (!pageUnit) {
|
||||
dataStr = $('#listForm').serialize();
|
||||
} else {
|
||||
if ($('#pageUnit').length) {
|
||||
$('#pageUnit').val(pageUnit);
|
||||
dataStr = $('#listForm').serialize();
|
||||
} else {
|
||||
dataStr = $('#listForm').serialize() + '&pageUnit=' + pageUnit;
|
||||
}
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
type: "post",
|
||||
url: "<c:url value="/mngr/goods/subsvc/selectSubsvcList"/>",
|
||||
data: dataStr,
|
||||
success: function (resultHtml) {
|
||||
$('#pageDiv').html(resultHtml);
|
||||
$('#sortDv').val($('#sortDvView').val());
|
||||
$('#pageUnitView').niceSelect();
|
||||
$('#sortDvView').niceSelect();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/*********************************************************
|
||||
* 구독서비스 복사 조회
|
||||
*********************************************************/
|
||||
const fn_move_subsvc_copy = (subsvcInnb) => {
|
||||
const url = '<c:url value="/mngr/goods/subsvc/selectSubsvcRegistForm"/>';
|
||||
$('#subsvcInnb').val(subsvcInnb);
|
||||
|
||||
$('#listForm').attr('action', url);
|
||||
$('#listForm').attr('method', 'post');
|
||||
$('#listForm').submit();
|
||||
}
|
||||
|
||||
/*********************************************************
|
||||
* 구독서비스 상세 조회
|
||||
*********************************************************/
|
||||
const fn_move_subsvc_dtl = (subsvcInnb) => {
|
||||
const url = '<c:url value="/mngr/goods/subsvc/selectSubsvcDtlForm"/>';
|
||||
$('#subsvcInnb').val(subsvcInnb);
|
||||
|
||||
$('#listForm').attr('action', url);
|
||||
$('#listForm').attr('method', 'post');
|
||||
$('#listForm').submit();
|
||||
}
|
||||
|
||||
/*********************************************************
|
||||
* 등록폼 이동
|
||||
******************************************************** */
|
||||
const fn_move_regpage = function () {
|
||||
const url = '<c:url value="/mngr/goods/subsvc/selectSubsvcRegistForm"/>';
|
||||
|
||||
$('#listForm').attr('action', url);
|
||||
$('#listForm').attr('method', 'post');
|
||||
$('#listForm').submit();
|
||||
};
|
||||
|
||||
/* 현제uri에 프로토콜, 호스트, 쿼리스티링을 제외하여 history갱신 */
|
||||
history.replaceState({}, null, location.pathname);
|
||||
|
||||
/* ****************************
|
||||
* event 제어
|
||||
******************************/
|
||||
const fn_event = function () {
|
||||
/* 검색조건 구독서비스 선택 시 회차 조회 이벤트*/
|
||||
$(document).on('change', '#srchSelSubsvcNm', function(){
|
||||
var srchSelSubsvcNm = $(this).val();
|
||||
if(fn_is_empty(srchSelSubsvcNm)){
|
||||
// 회차 초기화
|
||||
$('#srchSelSubsvcGnr').empty().append('<option value="">전체</option>').niceSelect('update');
|
||||
}else{
|
||||
//해당구독서비스 기수조회
|
||||
fn_getsubsvcGnr(srchSelSubsvcNm);
|
||||
}
|
||||
});
|
||||
|
||||
/* 목록 > 전체선택 체인지 이벤트 */
|
||||
$(document).on('change', '#checkAll', function () {
|
||||
let checkbox = $(this).closest('table').find('input[name="arrSubsvcInnb"]');
|
||||
|
||||
$(checkbox).prop('checked', false);
|
||||
$(checkbox).prop('checked', $(this).is(':checked'));
|
||||
});
|
||||
}
|
||||
|
||||
/* ****************************
|
||||
* 해당구독서비스 기수조회 AJAX
|
||||
******************************/
|
||||
const fn_getsubsvcGnr = function (srchSelSubsvcNm) {
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: '<c:url value="/mngr/goods/subsvc/selectSrchSubsvcGnrListAjax"/>',
|
||||
data: {
|
||||
'srchSelSubsvcNm': srchSelSubsvcNm
|
||||
},
|
||||
success: function (data) {
|
||||
if (data.resBody != null) {
|
||||
const result = JSON.parse(data.resBody.result);
|
||||
const srchSubsvcGnrList = result.srchSubsvcGnrList;
|
||||
if (srchSubsvcGnrList.length > 0) {
|
||||
// 회차 초기화
|
||||
$('#srchSelSubsvcGnr').empty().append('<option value="">전체</option>').niceSelect('update');
|
||||
// $('#srchSubsvcGnr option').filter(function() {
|
||||
// return $(this).val() !== '';
|
||||
// }).remove();
|
||||
|
||||
for (let i = 0; i < srchSubsvcGnrList.length; i++) {
|
||||
const srchSubsvcGnr = srchSubsvcGnrList[i];
|
||||
var check = "";
|
||||
if(srchSubsvcGnr.subsvcGnr == '${resultMap.paramVO.srchSelSubsvcGnr}'){
|
||||
check ="selected"
|
||||
}
|
||||
console.log("check:",check," resultMap.paramVO.srchSelSubsvcGnr", '${resultMap.paramVO.srchSelSubsvcGnr}');
|
||||
if(initFlag == true){
|
||||
$('#srchSelSubsvcGnr').append('<option value="' + srchSubsvcGnr.subsvcGnr + '" '+ check+'>' + srchSubsvcGnr.subsvcGnrNm + '</option>');
|
||||
fn_select_list();
|
||||
initFlag = false;
|
||||
}else{
|
||||
$('#srchSelSubsvcGnr').append('<option value="' + srchSubsvcGnr.subsvcGnr + '">' + srchSubsvcGnr.subsvcGnrNm + '</option>');
|
||||
|
||||
}
|
||||
}
|
||||
$('#srchSelSubsvcGnr').niceSelect('update');
|
||||
}
|
||||
}
|
||||
},
|
||||
error: function (data) {
|
||||
fn_proc_error_message(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 체크박스 전체 처리
|
||||
* */
|
||||
const fn_change_event = function (_target, _arg) {
|
||||
if (_arg === 'all') {
|
||||
|
||||
if ($('#' + _target + '-all').is(':checked')) {
|
||||
$('[name=' + _target + ']').prop('checked', true);
|
||||
} else {
|
||||
$('[name=' + _target + ']').prop('checked', false);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
let chkCnt = $('[name=' + _target + ']:checked').length;
|
||||
let allCnt = $('[name=' + _target + ']').length;
|
||||
if (chkCnt !== allCnt && $('#' + _target + '-all').is(':checked')) {
|
||||
$('#' + _target + '-all').prop('checked', false);
|
||||
} else if (chkCnt === allCnt) {
|
||||
$('#' + _target + '-all').prop('checked', true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************
|
||||
* 구독서비스 선택 삭제 AJAX
|
||||
*********************************************************/
|
||||
const fn_delete_check = function () {
|
||||
|
||||
let url = '<c:url value="/mngr/goods/subsvc/deleteSubsvc"/>';
|
||||
let arrSubsvcInnb = $("input[name='arrSubsvcInnb']:checked");
|
||||
let subsvcInnbArr = [];
|
||||
|
||||
if (arrSubsvcInnb.length === 0) {
|
||||
alert("선택된 상품이 없습니다.");
|
||||
return false;
|
||||
}else{
|
||||
arrSubsvcInnb.each( function (){
|
||||
subsvcInnbArr.push($(this).val());
|
||||
});
|
||||
}
|
||||
|
||||
if (confirm('상품을 <spring:message code="confirm.common.delete"/>')) {
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: url,
|
||||
data: {
|
||||
"arrSubsvcInnb": subsvcInnbArr
|
||||
},
|
||||
dataType: "json",
|
||||
success: function (data) {
|
||||
const message = JSON.parse(data.resBody.result).message;
|
||||
if(message == "success"){
|
||||
alert('<spring:message code="success.common.delete"/>');
|
||||
fn_select_list();
|
||||
}else{
|
||||
alert('<spring:message code="fail.common.delete"/>');
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* 관리자 주문 > 상품조회 > 검색조건 > 날짜 선택 이벤트 */
|
||||
$(document).on('click', '.dateRange-btn', function () {
|
||||
const date = $(this).attr('id');
|
||||
|
||||
$('.dateRange-btn').removeClass('selected');
|
||||
$('#' + date).addClass('selected');
|
||||
|
||||
const datepicker = $(this).closest('.td-inner').find('.datepicker');
|
||||
const start = $(datepicker[0]).attr('id');
|
||||
const end = $(datepicker[1]).attr('id');
|
||||
|
||||
if ('allDays' === date) {
|
||||
$('#' + start + ', #' + end).val('');
|
||||
|
||||
$('#datePeriod').val(date);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
fn_set_date(start, end, end, date);
|
||||
|
||||
$('#datePeriod').val(date);
|
||||
});
|
||||
|
||||
//카테고리 선택시 카테고리 아이디 저장(검색용)
|
||||
$(document).on('change', 'select[id^=ctgryDepth]', function () {
|
||||
const ctgryOptn = $(this).val()
|
||||
|
||||
if(!fn_is_empty(ctgryOptn)){
|
||||
$('#ctgryId').val(ctgryOptn)
|
||||
}else{
|
||||
//value가 ''인 카테고리 선택할경우
|
||||
let currentCtgryDepth = parseInt($(this).attr('id').replace('ctgryDepth', ''));
|
||||
|
||||
//1차 카테고리가 아닐 경우 이전 카테고리 번호 가져오기
|
||||
if(currentCtgryDepth !== 1){
|
||||
$('#ctgryId').val($('#ctgryDepth' + (currentCtgryDepth - 1)).val())
|
||||
}else{
|
||||
//1차 카테고리 일경우 카테고리 번호 비우기
|
||||
$('#ctgryId').val('')
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
//초기화버튼
|
||||
$(document).on('click', '#resetBtn', function () {
|
||||
$('#listForm')[0].reset();
|
||||
$('#srchSelSubsvcNm').niceSelect('update');
|
||||
$('#srchSelSubsvcNm').trigger("change");
|
||||
$('#srchSelSubsvcGnr').niceSelect('update');
|
||||
|
||||
fn_select_list(1);
|
||||
})
|
||||
|
||||
</script>
|
||||
<body>
|
||||
<%@ include file="/WEB-INF/views/comm/mngr/Header.jsp"%>
|
||||
<main class="main">
|
||||
<%@ include file="/WEB-INF/views/comm/mngr/Left.jsp"%>
|
||||
<div class="content">
|
||||
<div class="content__inner">
|
||||
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
|
||||
<div class="page-title">
|
||||
<h2 class="page-title__title">구독서비스 목록</h2>
|
||||
<div class="page-title__btn-container">
|
||||
<button onclick="fn_move_regpage()" class="btn primary">구독서비스 <spring:message code="button.insert"/></button>
|
||||
</div>
|
||||
</div>
|
||||
<form id='listForm' name="listForm" method="post" action="<c:url value="/mngr/goods/subsvc/selectSubsvcList"/>">
|
||||
<input type="hidden" id="pageIndex" name="pageIndex" value="${ resultMap.paramVO.pageIndex }"/>
|
||||
<input type="hidden" id="sortDv" name="sortDv" value="${ resultMap.paramVO.sortDv }">
|
||||
<input type="hidden" id="pageUnit" name="pageUnit" value="${ resultMap.paramVO.pageUnit }">
|
||||
<input type="hidden" id="subsvcInnb" name="subsvcInnb" value="">
|
||||
<section class="content-section" id="search-section">
|
||||
<div class="table-wrapper">
|
||||
<table class="table">
|
||||
<colgroup>
|
||||
<col style="width: 12%;">
|
||||
<col>
|
||||
<col style="width: 12%;">
|
||||
<col>
|
||||
</colgroup>
|
||||
<tr>
|
||||
<th>구독서비스</th>
|
||||
<td colspan="3">
|
||||
<div class="td-inner">
|
||||
<div class="select-box">
|
||||
<select title="구독서비스" id="srchSelSubsvcNm" name="srchSelSubsvcNm">
|
||||
<option value="" <c:if test="${ resultMap.paramVO.srchSelSubsvcNm eq ''}">selected="selected"</c:if>>전체</option>
|
||||
<c:forEach items="${resultMap.srchSubsvcList}" var="srchSubsvc" varStatus="status">
|
||||
<option value="${srchSubsvc.subsvcNm}" <c:if test="${ resultMap.paramVO.srchSelSubsvcNm eq srchSubsvc.subsvcNm}">selected="selected"</c:if>>${srchSubsvc.subsvcNm}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<div class="select-box">
|
||||
<select title="구독서비스회차" id="srchSelSubsvcGnr" name="srchSelSubsvcGnr">
|
||||
<option value="" <c:if test="${ resultMap.paramVO.srchSelSubsvcGnr eq ''}">selected="selected"</c:if>>전체</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>구독서비스명</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text xl" type="text" title="구독서비스명" id="srchSubsvcNm" name="srchSubsvcNm" value="<c:out value="${ resultMap.paramVO.srchSubsvcNm }" />">
|
||||
</div>
|
||||
</td>
|
||||
<th>기수명</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text xl" type="text" title="구독서비스명" id="srchSubsvcGnrNm" name="srchSubsvcGnrNm" value="<c:out value="${ resultMap.paramVO.srchSubsvcGnrNm }" />">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>판매상태</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="b-checkbox-container">
|
||||
<label class="b-checkbox checkbox check-all">
|
||||
<input id="srchArrSubsvcSttusCd-all" type="checkbox" name="srchArrSubsvcSttusCd-all" <c:if test="${resultMap.paramVO.srchArrSubsvcSttusCd == null || fn:length(resultMap.paramVO.srchArrSubsvcSttusCd) == 3}" >checked</c:if> value="" onclick="fn_change_event('srchArrSubsvcSttusCd', 'all');">
|
||||
<span class="check"></span>
|
||||
<span class="subsvcSttus-all">전체</span>
|
||||
</label>
|
||||
<c:forEach items="${resultMap.srchSubsvcSttusList}" var="srchSubsvcSttus" varStatus="status">
|
||||
<label class="b-checkbox checkbox">
|
||||
<input type="checkbox" name="srchArrSubsvcSttusCd" value="${srchSubsvcSttus.cd}" onclick="fn_change_event('srchArrSubsvcSttusCd', 'other');" <c:if test="${resultMap.paramVO.srchArrSubsvcSttusCd == null || fn:contains(resultMap.paramVO.srchArrSubsvcSttusCd, srchSubsvcSttus.cd) }">checked</c:if>>
|
||||
<span class="check"></span>
|
||||
<span class="control-label">${srchSubsvcSttus.cdNm}</span>
|
||||
</label>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<th>노출여부</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="custom-radio-container">
|
||||
<div class="custom-radio">
|
||||
<input type="radio" id="srchExpsrDvCd" name="srchExpsrDvCd" value="" <c:if test="${resultMap.paramVO.srchExpsrDvCd eq '' || resultMap.paramVO.srchExpsrDvCd == null}">checked</c:if>>
|
||||
<label for="srchExpsrDvCd">전체</label>
|
||||
</div>
|
||||
<c:forEach items="${resultMap.srchExpsrDvList}" var="srchExpsrDvCd" varStatus="status">
|
||||
<div class="custom-radio">
|
||||
<input type="radio" id="srchExpsrDvCd${status.count}" name="srchExpsrDvCd" value="${srchExpsrDvCd.cd}"<c:if test="${srchExpsrDvCd.cd eq resultMap.paramVO.srchExpsrDvCd}">checked</c:if>>
|
||||
<label for="srchExpsrDvCd${status.count}">${srchExpsrDvCd.cdNm}</label>
|
||||
</div>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="form-control-container">
|
||||
<div class="left"></div>
|
||||
<div class="center">
|
||||
<button class="btn outline" id="resetBtn" type="button">초기화</button>
|
||||
<button class="btn primary" id="searchBtn" type="button" onclick="fn_select_list(1);"><spring:message code="button.search"/> </button>
|
||||
</div>
|
||||
<div class="right">
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<div id="pageDiv">
|
||||
</div>
|
||||
</form>
|
||||
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="modalDiv">
|
||||
|
||||
</div>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
842
src/main/webapp/WEB-INF/views/mngr/goods/subsvc/SubsvcU.jsp
Normal file
842
src/main/webapp/WEB-INF/views/mngr/goods/subsvc/SubsvcU.jsp
Normal file
@@ -0,0 +1,842 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui" %>
|
||||
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld" %>
|
||||
|
||||
<%--
|
||||
Class Name : SubsvcU.jsp
|
||||
Description : 구독서비스 상세
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2026-01-27 jazz 최초생성
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>일반 관리자</title>
|
||||
<%-- 공통 include --%>
|
||||
<%@ include file="/WEB-INF/views/comm/mngr/Include.jsp"%>
|
||||
</head>
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
//페이지 로드 시 숫자 인풋 정규화( 3자리 컴마)
|
||||
$('.input-text.number').each(function () {
|
||||
var input = $(this).val();
|
||||
$(this).val(input.replace(/[^0-9]/g, "").replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,"));
|
||||
});
|
||||
|
||||
const expsrSetTable = document.getElementById('expsrSet');
|
||||
//노출예약 체크되어있을 경우 enable 처리
|
||||
if($("input[name='expsrDvCd']:checked").val() ==='03'){
|
||||
enableTableInputs(expsrSetTable)
|
||||
}
|
||||
|
||||
const sopmalCd = $('#sopmalCd').val()
|
||||
fn_create_ckeditor('#subsvcDc', sopmalCd); //상세 설명 > 상품 설명 ck에디터 적용
|
||||
fn_create_ckeditor('#mblSubsvcDc', sopmalCd); // 모바일용 상세 설명 > 모바일용 상품 설명 ck에디터 적용
|
||||
/* 모바일용 상세 설명 설정 이벤트 */
|
||||
fn_handleMblSubsvcDcPcSameAt();
|
||||
|
||||
//모바일용 상세 설명 설정 이벤트 설정
|
||||
$('[name="mblSubsvcDcPcSameAt"]').on('change', fn_handleMblSubsvcDcPcSameAt);
|
||||
|
||||
//실판매가 자동계산 이벤트 등록
|
||||
$('[name="dlvyCnt"]').on('change', fn_cal_selpric);
|
||||
$('[name="subsvcCt"]').on('change', fn_cal_selpric);
|
||||
$('[name="tmeDlvyAmt"]').on('change', fn_cal_selpric);
|
||||
|
||||
$('#invntryQy').on('change', fn_cal_availQt)
|
||||
|
||||
});
|
||||
|
||||
//숫자 인풋 포커스시 0 제거
|
||||
$(document).on("focus", '.input-text.number',function () {
|
||||
if(fn_nvl($(this).val(), '0') === '0'){
|
||||
$(this).val('');
|
||||
}
|
||||
});
|
||||
|
||||
//재고와 상관없이 판매일 경우 옵션재고 disabled
|
||||
$(document).on('change', 'input[name="invntryPolicyCd"]',function () {
|
||||
|
||||
let normalQy = $('input[name="invntryQy_normal"]');
|
||||
let invntryQy = $('input[name="invntryQy_invntry"]');
|
||||
let addeddQy = $('input[name="invntryQy_added"]');
|
||||
|
||||
if($(this).val() === '02'){
|
||||
normalQy.prop('disabled', true)
|
||||
invntryQy.prop('disabled', true)
|
||||
addeddQy.prop('disabled', true)
|
||||
}else{
|
||||
normalQy.prop('disabled', false)
|
||||
invntryQy.prop('disabled', false)
|
||||
addeddQy.prop('disabled', false)
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
//예약 판매설정 체크 해제시 예약상품 배송일자, 안내문구 빈값 처리
|
||||
$(document).on('click', '#goodsExpsrTy02', function () {
|
||||
if(!$(this).prop('checked')){
|
||||
$('#resveGoods input').val('')
|
||||
}
|
||||
})
|
||||
|
||||
//노출여부 노출예약이 아닐경우 노출 정보 빈값 처리
|
||||
$(document).on('click', 'input[name="expsrDvCd"]', function () {
|
||||
const target = $('#expsrDvCd3')
|
||||
if($(this).attr('id') !== target.attr('id')){
|
||||
$('#expsrSet input').val('')
|
||||
}
|
||||
})
|
||||
|
||||
//재고와 상관없이 판매일 경우 가용재고제한수량 빈값처리
|
||||
$(document).on('click', '#invntryPolicyCd2', function () {
|
||||
$('#avlinvLmttQy').val('')
|
||||
})
|
||||
|
||||
/* ********************************************************
|
||||
* 모바일용 상세설명 설정 enable-disable
|
||||
******************************************************** */
|
||||
function fn_handleMblSubsvcDcPcSameAt() {
|
||||
if($('[name="mblSubsvcDcPcSameAt"]:checked').val() === 'Y'){
|
||||
$('.mobileSubsvcCn').hide();
|
||||
}else{
|
||||
$('.mobileSubsvcCn').show();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* ********************************************************
|
||||
* 노출여부 enable-disable
|
||||
******************************************************** */
|
||||
function handleRadioClick2(radio) {
|
||||
//노출쳬약 객체
|
||||
const lastRadio = document.querySelector('#expsrDvCd3');
|
||||
const table = document.getElementById('expsrSet');
|
||||
|
||||
if (radio === lastRadio) {
|
||||
enableTableInputs(table);
|
||||
} else {
|
||||
disableTableInputs(table);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 재고에 따른 판매 enable-disable
|
||||
******************************************************** */
|
||||
function handleRadioClickDisable(radio) {
|
||||
const firstRadio = document.querySelector('input[name="invntryPolicyCd"]:first-of-type');
|
||||
const inputText = document.getElementById('avlinvLmttQy');
|
||||
|
||||
if (radio === firstRadio) {
|
||||
inputText.disabled = false;
|
||||
} else {
|
||||
inputText.disabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* enable-disable
|
||||
******************************************************** */
|
||||
function enableTableInputs(table) {
|
||||
const inputs = table.querySelectorAll('input');
|
||||
inputs.forEach(input => input.disabled = false);
|
||||
}
|
||||
|
||||
function disableTableInputs(table) {
|
||||
const inputs = table.querySelectorAll('input');
|
||||
inputs.forEach(input => input.disabled = true);
|
||||
}
|
||||
|
||||
function convertToDate(dateStr) {
|
||||
// 입력된 문자열을 Date 객체로 변환
|
||||
const date = new Date(dateStr);
|
||||
// 유효하지 않은 날짜인 경우 null 반환
|
||||
if (isNaN(date.getTime())) {
|
||||
return null;
|
||||
}
|
||||
return date;
|
||||
}
|
||||
|
||||
//시간을 분으로 변경하는 함수
|
||||
function timeToMinutes(timeStr) {
|
||||
// 시간과 분을 ':'를 기준으로 분리
|
||||
const [hours, minutes] = timeStr.split(':').map(Number);
|
||||
// 시간을 분으로 변환
|
||||
return hours * 60 + minutes;
|
||||
}
|
||||
|
||||
//마지막 컴마 지우기
|
||||
const remove_Last_Comma = function removeLastComma(str) {
|
||||
const lastCommaIndex = str.lastIndexOf(',');
|
||||
if (lastCommaIndex !== -1) {
|
||||
return str.substring(0, lastCommaIndex);
|
||||
} else {
|
||||
return str;
|
||||
}
|
||||
}
|
||||
|
||||
const fn_create_input = function (type, name, value, tgtForm) {
|
||||
const input = document.createElement('input');
|
||||
input.setAttribute("type", type);
|
||||
input.setAttribute("name", name);
|
||||
input.setAttribute("value", value);
|
||||
tgtForm.appendChild(input);
|
||||
}
|
||||
|
||||
|
||||
/* ********************************************************
|
||||
* 리스트 바로가기
|
||||
******************************************************** */
|
||||
const fn_select_list = function () {
|
||||
const url = '<c:url value="/mngr/goods/subsvc/selectSubsvcListForm"/>';
|
||||
|
||||
$('#subsvcForm').attr('action', url);
|
||||
$('#subsvcForm').attr('method', 'post');
|
||||
$('#subsvcForm').submit();
|
||||
};
|
||||
|
||||
//모든 컴마 삭제 및 문자를 숫자로 변환
|
||||
const fn_comma_del_str_to_number = function (str) {
|
||||
|
||||
// null이나 undefined인 경우 0을 반환
|
||||
if (str === null || str === undefined || str.trim() === '') {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 쉼표를 제거하고 숫자로 변환
|
||||
const numberWithoutCommas = str.replace(/,/g, '');
|
||||
const number = parseFloat(numberWithoutCommas);
|
||||
|
||||
// 변환된 값이 NaN인 경우 0을 반환
|
||||
if (isNaN(number)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return number;
|
||||
|
||||
}
|
||||
|
||||
/* 에러메세지 처리 */
|
||||
const fn_proc_error_message = function(data) {
|
||||
$('#overlay').fadeOut();
|
||||
|
||||
if (!data.responseJSON.resBody.message) {
|
||||
alert('<spring:message code="error.internal-server"/>');
|
||||
} else {
|
||||
if (fn_check_json(data.responseJSON.resBody.message)) {
|
||||
const errorObject = JSON.parse(data.responseJSON.resBody.message);
|
||||
|
||||
if (!errorObject) {
|
||||
alert('<spring:message code="error.internal-server"/>');
|
||||
} else {
|
||||
if (!errorObject.errorMsg) {
|
||||
alert('<spring:message code="error.internal-server"/>');
|
||||
} else {
|
||||
alert(errorObject.errorMsg);
|
||||
|
||||
let isMtched = false;
|
||||
|
||||
$('.main').eq(0).find('input, select, textarea').each(function () {
|
||||
for (let idx = 0; idx < errorObject.errorFields.length; idx++) {
|
||||
const name = $(this).prop('name');
|
||||
|
||||
if (!fn_is_empty(name)) {
|
||||
if (errorObject.errorFields[idx].indexOf(name) >= 0) {
|
||||
isMtched = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isMtched) {
|
||||
$(this).focus();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (data.responseJSON.resBody.message) {
|
||||
alert(data.responseJSON.resBody.message);
|
||||
} else {
|
||||
alert('<spring:message code="error.internal-server"/>');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//상품이미지 삭제
|
||||
const deleteFileImg = function (obj) {
|
||||
$("#delImg").val($("#img").val());
|
||||
|
||||
$(obj).parent('div.file-preview').parent('div.file-preview__container').remove()
|
||||
}
|
||||
|
||||
/*실판매가 자동계산*/
|
||||
const fn_cal_selpric = function(){
|
||||
var dlvyCnt = $('#dlvyCnt'); //배송횟수
|
||||
var subsvcCt = $('#subsvcCt'); //구독료
|
||||
var tmeDlvyAmt = $('#tmeDlvyAmt'); //1회 배송비
|
||||
var selpric = $('#selpric'); //1회 배송비
|
||||
selpric.val(((Number(dlvyCnt.val().replace(/,/g, '')) * Number(tmeDlvyAmt.val().replace(/,/g, ''))) + Number(subsvcCt.val().replace(/,/g, ''))).toLocaleString());
|
||||
}
|
||||
|
||||
/*가용재고 자동계산*/
|
||||
const fn_cal_availQt = function(){
|
||||
var invntryQy = $('#invntryQy');
|
||||
var usefulInvntryQy = $('#usefulInvntryQy');
|
||||
var availQt = $('#availQt');
|
||||
availQt.val(Number(invntryQy.val().replace(/,/g, '')) - Number(usefulInvntryQy.val().replace(/,/g, '')));
|
||||
}
|
||||
|
||||
/** 제약조건 체크 */
|
||||
const validate = function(){
|
||||
var retVal = true;
|
||||
//에디터내용을 textarea로 복사
|
||||
var subsvcDc = $('#subsvcDc');
|
||||
subsvcDc.val(fn_get_editor_data('#subsvcDc'));
|
||||
|
||||
// 텍스트 입력 내용중 필수 항목 체크
|
||||
$(':text[required]').each(function () {
|
||||
if($(this).hasClass('number')){
|
||||
if ($(this).val().trim() == '' || $(this).val().trim() == '0') {
|
||||
alert($(this).prop('title')+"은(는) 필수입니다");
|
||||
$(this).focus();
|
||||
retVal = false;
|
||||
return false;
|
||||
}
|
||||
}else{
|
||||
if ($(this).val().trim() == '') {
|
||||
alert($(this).prop('title')+"은(는) 필수입니다");
|
||||
$(this).focus();
|
||||
retVal = false;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
});
|
||||
if(!retVal){
|
||||
return retVal;
|
||||
}
|
||||
|
||||
//노출예약 인 경우 노출기간 필수
|
||||
if($('input[name="expsrDvCd"]:checked').val() == '03'){
|
||||
if($('#expsrBgnDt_dt').val().trim() == ''){
|
||||
alert($('#expsrBgnDt_dt').prop('title')+"은(는) 노출여부가 노출예약인 경우 필수입니다");
|
||||
$('#expsrBgnDt_dt').focus();
|
||||
return false;
|
||||
}
|
||||
if($('#expsrBgnDt_time').val().trim().replaceAll(':','') == ''){
|
||||
alert($('#expsrBgnDt_time').prop('title')+"은(는) 노출여부가 노출예약인 경우 필수입니다");
|
||||
$('#expsrBgnDt_time').focus();
|
||||
return false;
|
||||
}
|
||||
if($('#expsrEndDt_dt').val().trim() == ''){
|
||||
alert($('#expsrEndDt_dt').prop('title')+"은(는) 노출여부가 노출예약인 경우 필수입니다");
|
||||
$('#expsrEndDt_dt').focus();
|
||||
return false;
|
||||
}
|
||||
if($('#expsrEndDt_time').val().trim().replaceAll(':','') == ''){
|
||||
alert($('#expsrEndDt_time').prop('title')+"은(는) 노출여부가 노출예약인 경우 필수입니다");
|
||||
$('#expsrEndDt_time').focus();
|
||||
return false;
|
||||
}
|
||||
// 노출기간 셋팅
|
||||
const expsrBgnDt = $('#expsrBgnDt_dt').val() + ' ' +$('#expsrBgnDt_time').val() +':00'
|
||||
const expsrEndDt = $('#expsrEndDt_dt').val() + ' ' +$('#expsrEndDt_time').val() +':00'
|
||||
|
||||
$('#expsrBgnDt').val(expsrBgnDt);
|
||||
$('#expsrEndDt').val(expsrEndDt);
|
||||
}else if($('input[name="expsrDvCd"]:checked').val() != '03'){
|
||||
$('#expsrBgnDt').val('');
|
||||
$('#expsrEndDt').val('');
|
||||
}
|
||||
|
||||
//재고가 있으면 판매인 경우 개수 품절처리 필수
|
||||
if($('input[name="invntryPolicyCd"]:checked').val() == '01'){
|
||||
if($('#avlinvLmttQy').val() == ''){
|
||||
alert($('#avlinvLmttQy').prop('title')+"은(는) 노출여부가 노출예약인 경우 필수입니다");
|
||||
$('#avlinvLmttQy').focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//이미지 필수 체크
|
||||
if((($('#delImg').val() != '' || $('#img').val() == '') && imgDropzone.files.length != 1)){
|
||||
if(imgDropzone.files.length == 0){
|
||||
alert("대표이미지(섬네일)은(는) 필수입니다");
|
||||
}else{
|
||||
alert("대표이미지(섬네일)은(는) 1개만 등록가능합니다");
|
||||
}
|
||||
$('#img-dropzone')[0].scrollIntoView();
|
||||
// $('#img-dropzone').focus();
|
||||
return false;
|
||||
|
||||
}else if(imgDropzone.files.length > 1){
|
||||
alert("대표이미지(섬네일)은(는) 1개만 등록가능합니다");
|
||||
$('#img-dropzone').focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
//상품설명 필수체크
|
||||
if(subsvcDc.val() == ''){
|
||||
alert(subsvcDc.prop('title')+"은(는) 필수입니다");
|
||||
CKEditorArray['#subsvcDc'].editing.view.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
//PC와 모바일 다르게 설정인 경우 모바일 상품설명 필수
|
||||
if($('input[name="mblSubsvcDcPcSameAt"]:checked').val() == 'N'){
|
||||
var mblSubsvcDc = $('#mblSubsvcDc');
|
||||
mblSubsvcDc.val(fn_get_editor_data('#mblSubsvcDc'));
|
||||
if(mblSubsvcDc.val().trim() == ''){
|
||||
alert(mblSubsvcDc.prop('title')+"은(는) 필수입니다");
|
||||
CKEditorArray['#mblSubsvcDc'].editing.view.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*수정하기*/
|
||||
const fn_updateSubsvc = function (){
|
||||
if(!validate()){
|
||||
return false;
|
||||
}
|
||||
|
||||
const url = '<c:url value="/mngr/goods/subsvc/updateSubsvc"/>';
|
||||
var formData = new FormData($('#subsvcForm')[0]);
|
||||
|
||||
imgDropzone.files.forEach(function(file, index){
|
||||
console.log("file",file);
|
||||
//1개만 등록 되도록
|
||||
if(index == 0){
|
||||
formData.append('files',file);
|
||||
}
|
||||
});
|
||||
|
||||
console.log("formData",formData);
|
||||
|
||||
if (confirm(`구독서비스를 <spring:message code="confirm.common.update"/>`)) {
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
enctype: 'multipart/form-data',
|
||||
url: url,
|
||||
data: formData,
|
||||
contentType: false,
|
||||
processData: false,
|
||||
success: function (data) {
|
||||
try{
|
||||
const message = JSON.parse(data.resBody.result).message;
|
||||
if(message == "success"){
|
||||
alert('<spring:message code="success.common.update"/>');
|
||||
//등록 후 수정화면으로 이동
|
||||
window.location.reload();
|
||||
} else {
|
||||
alert('<spring:message code="fail.common.update"/>');
|
||||
}
|
||||
}catch (e) {
|
||||
console.log(e);
|
||||
alert('<spring:message code="fail.common.update"/>');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
<body>
|
||||
<%@ include file="/WEB-INF/views/comm/mngr/Header.jsp"%>
|
||||
<main class="main">
|
||||
<%@ include file="/WEB-INF/views/comm/mngr/Left.jsp"%>
|
||||
<div class="content">
|
||||
<div class="content__inner">
|
||||
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
|
||||
<div class="page-title">
|
||||
<h2 class="page-title__title">구독서비스 수정 (상품번호 : ${resultMap.subsvcDtl.subsvcInnb})</h2>
|
||||
<div class="page-title__btn-container">
|
||||
<button onclick="fn_select_list()" class="btn outline"><spring:message code="button.list"/></button>
|
||||
<button onclick="fn_updateSubsvc();return false;" class="btn primary"><spring:message code="button.update"/></button>
|
||||
</div>
|
||||
</div>
|
||||
<form id="subsvcForm" method="post" action="" enctype="multipart/form-data">
|
||||
<input type="hidden" id="subsvcInnb" name="subsvcInnb" value="${resultMap.subsvcDtl.subsvcInnb}">
|
||||
<input type="hidden" id="sopmalCd" name="sopmalCd" value="${resultMap.paramVO.sopmalCd}">
|
||||
<input type="hidden" id="srchSelSubsvcNm" name="srchSelSubsvcNm" value="${resultMap.paramVO.srchSelSubsvcNm}">
|
||||
<input type="hidden" id="srchSubsvcNm" name="srchSubsvcNm" value="${resultMap.paramVO.srchSubsvcNm}">
|
||||
<input type="hidden" id="srchSelSubsvcGnr" name="srchSelSubsvcGnr" value="${resultMap.paramVO.srchSelSubsvcGnr}">
|
||||
<input type="hidden" id="srchSubsvcGnrNm" name="srchSubsvcGnrNm" value="${resultMap.paramVO.srchSubsvcGnrNm}">
|
||||
<c:forEach items="${resultMap.paramVO.srchArrSubsvcSttusCd}" var="srchSubsvcSttusCd" varStatus="status">
|
||||
<input type="hidden" id="srchArrSubsvcSttusCd${status.count}" name="srchArrSubsvcSttusCd" value="${srchSubsvcSttusCd}">
|
||||
</c:forEach>
|
||||
<input type="hidden" id="srchExpsrDvCd" name="srchExpsrDvCd" value="${resultMap.paramVO.srchExpsrDvCd}">
|
||||
<input type="hidden" id="sortDv" name="sortDv" value="${resultMap.paramVO.sortDv}">
|
||||
<input type="hidden" id="pageIndex" name="pageIndex" value="${ resultMap.paramVO.pageIndex }"/>
|
||||
<input type="hidden" id="pageUnit" name="pageUnit" value="${ resultMap.paramVO.pageUnit }">
|
||||
<input type="hidden" id="delImg" name="delImg" value="">
|
||||
<input type="hidden" id="expsrBgnDt" name="expsrBgnDt" value="${resultMap.subsvcDtl.expsrBgnDt}">
|
||||
<input type="hidden" id="expsrEndDt" name="expsrEndDt" value="${resultMap.subsvcDtl.expsrEndDt}">
|
||||
<input type="hidden" id="usefulInvntryQy" name="usefulInvntryQy" value="${resultMap.subsvcDtl.usefulInvntryQy}">
|
||||
<spring:eval expression="@environment.getProperty('spring.servlet.multipart.max-file-size')" var="maxFileSize"/>
|
||||
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.extensions.images')" var="acceptFileExtensions"/>
|
||||
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.cdnurl')" var="cdnurl"/>
|
||||
<input type="hidden" id="cdnurl" value="${cdnurl}"/>
|
||||
|
||||
<section id="section01" class="content-section content-scroll-detect content-fold">
|
||||
<div class="content-fold__header">
|
||||
<h3 class="content-section__title">기본정보</h3>
|
||||
<button class="content-fold__btn"><span class="visually-hidden">접기</span></button>
|
||||
</div>
|
||||
<div class="content-fold__content">
|
||||
<div class="table-wrapper">
|
||||
<table class="table">
|
||||
<caption>기본정보</caption>
|
||||
<colgroup>
|
||||
<col style="width: 12%;">
|
||||
<col style="width: 38%">
|
||||
<col style="width: 12%;">
|
||||
<col style="width: 38%">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>구독서비스명<span class="red-7">*</span></th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text xl" type="text" title="구독서비스명" id="subsvcNm" name="subsvcNm" maxlength="100" value="${resultMap.subsvcDtl.subsvcNm}" required>
|
||||
</div>
|
||||
</td>
|
||||
<th>구독기간<span class="red-7">*</span></th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text xsm number text-right" type="text" title="구독기간" id="subPd" name="subPd" maxlength="3" value="${resultMap.subsvcDtl.subPd}" required> 개월
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>기수</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text xsm number text-right" type="text" title="기수" id="subsvcGnr" name="subsvcGnr" value="${resultMap.subsvcDtl.subsvcGnr}" readonly> 기
|
||||
</div>
|
||||
</td>
|
||||
<th>기수명<span class="red-7">*</span></th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text xl" type="text" title="기수명" id="subsvcGnrNm" name="subsvcGnrNm" maxlength="80" value="${resultMap.subsvcDtl.subsvcGnrNm}" required>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>배송횟수<span class="red-7">*</span></th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text xsm number text-right" type="text" title="배송횟수" id="dlvyCnt" name="dlvyCnt" maxlength="3" value="${resultMap.subsvcDtl.dlvyCnt}" required> 회
|
||||
</div>
|
||||
</td>
|
||||
<th>배송주기<span class="red-7">*</span></th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text sm" type="text" title="배송주기" id="dlvyCycle" name="dlvyCycle" maxlength="30" value="${resultMap.subsvcDtl.dlvyCycle}" required>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section id="section02" class="content-section content-scroll-detect content-fold">
|
||||
<div class="content-fold__header">
|
||||
<h3 class="content-section__title">판매정보</h3>
|
||||
<button class="content-fold__btn"><span class="visually-hidden">접기</span></button>
|
||||
</div>
|
||||
<div class="content-fold__content">
|
||||
<div class="table-wrapper">
|
||||
<table class="table">
|
||||
<caption>판매정보</caption>
|
||||
<colgroup>
|
||||
<col style="width: 12%;">
|
||||
<col style="width: 38%">
|
||||
<col style="width: 12%;">
|
||||
<col style="width: 38%">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>구독료<span class="red-7">*</span></th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text sm number text-right" type="text" title="구독료" id="subsvcCt" name="subsvcCt" maxlength="11" value="${resultMap.subsvcDtl.subsvcCt}" required> 円(엔)
|
||||
</div>
|
||||
</td>
|
||||
<th>1회 배송비<span class="red-7">*</span></th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text sm number text-right" type="text" title="1회 배송비" id="tmeDlvyAmt" name="tmeDlvyAmt" maxlength="11" value="${resultMap.subsvcDtl.tmeDlvyAmt}" required> 円(엔)
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>소비자가</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text sm number text-right" type="text" title="소비자가" id="cnsmrpric" name="cnsmrpric" maxlength="11" value="${resultMap.subsvcDtl.cnsmrpric}"> 円(엔)
|
||||
</div>
|
||||
</td>
|
||||
<th>실판매가<span class="red-7">*</span></th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text sm number text-right" type="text" title="실판매가" id="selpric" name="selpric" maxlength="11" value="${resultMap.subsvcDtl.selpric}" readonly> 円(엔)
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section id="section03" class="content-section content-scroll-detect content-fold">
|
||||
<div class="content-fold__header">
|
||||
<h3 class="content-section__title">구독설정</h3>
|
||||
<button type="button" class="content-fold__btn"><span class="visually-hidden">접기</span></button>
|
||||
</div>
|
||||
<div class="content-fold__content">
|
||||
<div class="table-wrapper">
|
||||
<table class="table">
|
||||
<caption>구독설정</caption>
|
||||
<colgroup>
|
||||
<col style="width: 12%;">
|
||||
<col>
|
||||
<col style="width: 12%;">
|
||||
<col>
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>재고<span class="red-7">*</span></th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text sm number text-right" type="text" title="재고" id="invntryQy" name="invntryQy" maxlength="11" value="${resultMap.subsvcDtl.invntryQy}" required>
|
||||
</div>
|
||||
</td>
|
||||
<th>가용재고</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text sm number text-right" type="text" title="가용재고" id="availQt" maxlength="11" value="${resultMap.subsvcDtl.availQt}" readonly>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>판매 상태</th>
|
||||
<td colspan="2">
|
||||
<div class="td-inner">
|
||||
<div class="custom-radio-container">
|
||||
<c:forEach items="${resultMap.subsvcSttusList}" var="subsvcSttus" varStatus="status">
|
||||
<div class="custom-radio">
|
||||
<input type="radio" id="subsvcSttusCd${status.count}" name="subsvcSttusCd" title="판매 상태" value="${subsvcSttus.cd}" <c:if test="${resultMap.subsvcDtl.subsvcSttusCd eq subsvcSttus.cd}">checked</c:if>/>
|
||||
<label for="subsvcSttusCd${status.count}">${subsvcSttus.cdNm}</label>
|
||||
<input type="hidden" value="${resultMap.subsvcDtl.subsvcSttusCd}" id="subsvcSttusCdChk"/>
|
||||
</div>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>노출 여부</th>
|
||||
<td colspan="3">
|
||||
<div class="td-inner vertical">
|
||||
<div class="custom-radio-container mt-10">
|
||||
<c:forEach items="${resultMap.expsrDvList}" var="expsrDv" varStatus="status">
|
||||
<div class="custom-radio">
|
||||
<input type="radio" id="expsrDvCd${status.count}" name="expsrDvCd" title="노출 여부" value="${expsrDv.cd}" onclick="handleRadioClick2(this);" <c:if test="${resultMap.subsvcDtl.expsrDvCd eq expsrDv.cd}">checked</c:if>/>
|
||||
<label for="expsrDvCd${status.count}">${expsrDv.cdNm}</label>
|
||||
<input type="hidden" value="${resultMap.subsvcDtl.expsrDvCd}" id="expsrDvCdChk"/>
|
||||
</div>
|
||||
</c:forEach>
|
||||
</div>
|
||||
<div class="table-wrapper mt-10">
|
||||
<table class="table">
|
||||
<caption>노출 기간</caption>
|
||||
<colgroup>
|
||||
<col style="width: 16%;">
|
||||
<col>
|
||||
</colgroup>
|
||||
<tbody id="expsrSet">
|
||||
<tr>
|
||||
<th>노출 기간</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input type="text" id="expsrBgnDt_dt" class="datepicker" title="시작 날짜 선택" autocomplete="off" value="${fn:split(resultMap.subsvcDtl.expsrBgnDt,' ')[0]}" disabled>
|
||||
<div class="timepicker-container">
|
||||
<input type="text" class="bs-timepicker" id="expsrBgnDt_time" title="시작 시간 설정" value="${fn:split(fn:split(resultMap.subsvcDtl.expsrBgnDt,' ')[1], ':')[0]}:${fn:split(fn:split(resultMap.subsvcDtl.expsrBgnDt,' ')[1], ':')[1]}" disabled>
|
||||
</div>
|
||||
<span class="tilde">~</span>
|
||||
<input type="text" id="expsrEndDt_dt" class="datepicker" title="종료 날짜 선택" autocomplete="off" value="${fn:split(resultMap.subsvcDtl.expsrEndDt,' ')[0]}" disabled>
|
||||
<div class="timepicker-container">
|
||||
<input type="text" class="bs-timepicker" id="expsrEndDt_time" title="종료 시간 설정" value="${fn:split(fn:split(resultMap.subsvcDtl.expsrEndDt,' ')[1], ':')[0]}:${fn:split(fn:split(resultMap.subsvcDtl.expsrEndDt,' ')[1], ':')[1]}" disabled>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>재고에 따른 판매</th>
|
||||
<td colspan="3">
|
||||
<div class="td-inner">
|
||||
<div class="custom-radio-container">
|
||||
<c:forEach items="${resultMap.invntryPolicyList}" var="invntryPolicy" varStatus="status">
|
||||
<div class="custom-radio">
|
||||
<input type="radio" id="invntryPolicyCd${status.count}" name="invntryPolicyCd" value="${invntryPolicy.cd}" onclick="handleRadioClickDisable(this);"<c:if test="${resultMap.subsvcDtl.invntryPolicyCd eq invntryPolicy.cd}">checked</c:if>/>
|
||||
<label for="invntryPolicyCd${status.count}">${invntryPolicy.cdNm}</label>
|
||||
</div>
|
||||
<c:if test="${status.first}">
|
||||
<div>
|
||||
<span class="ml-4">(</span>
|
||||
<input class="input-text number xsm ml-5 right" id="avlinvLmttQy" name="avlinvLmttQy" value="${resultMap.subsvcDtl.avlinvLmttQy}" type="text" title="해당 인풋에 대한 설명" <c:if test="${resultMap.subsvcDtl.invntryPolicyCd eq '02'}"> disabled</c:if> />
|
||||
개 이하 일 때 품절 처리
|
||||
<span class="ml-4">)</span>
|
||||
</div>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section id="section07" class="content-section content-scroll-detect content-fold">
|
||||
<div class="content-fold__header">
|
||||
<h3 class="content-section__title">구독서비스 설명</h3>
|
||||
<button class="content-fold__btn"><span class="visually-hidden">접기</span></button>
|
||||
</div>
|
||||
<div class="content-fold__content">
|
||||
<div class="table-wrapper">
|
||||
<table class="table">
|
||||
<caption>구독서비스 설명</caption>
|
||||
<colgroup>
|
||||
<col style="width: 12%;">
|
||||
<col>
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>대표이미지(썸네일) 등록<span class="red-7">*</span></th>
|
||||
<td>
|
||||
<div class="td-inner vertical">
|
||||
<div class="dropzone-wrapper">
|
||||
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.extensions.images')" var="acceptFileExtensions"/>
|
||||
<div class="dropzone" id="img-dropzone">
|
||||
</div><p class="fyi gray-7 mt-15">1개의 이미지만 등록가능합니다.</p>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>등록한 대표이미지(썸네일)</th>
|
||||
<td>
|
||||
<div class="td-inner" id="sortable">
|
||||
<c:if test="${not empty resultMap.subsvcDtl.img}">
|
||||
<div class="file-preview__container">
|
||||
<div class="file-preview">
|
||||
<span class="file-preview__number"></span>
|
||||
<button class="file-preview__delete" id="file-preview__delete" onclick="deleteFileImg(this)">
|
||||
<span class="visually-hidden">삭제</span></button>
|
||||
<div class="file-preview__image">
|
||||
<img src="<c:out value="${cdnurl}${resultMap.subsvcDtl.img}"/>" alt="구독서비스 이미지" onerror="this.src='/mngr/images/image_placeholder.png'" >
|
||||
<input type="hidden" id="img" name="img" value="<c:out value="${resultMap.subsvcDtl.img}"/>">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</c:if>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>상품 설명<span class="red-7">*</span></th>
|
||||
<td>
|
||||
<div class="td-inner"><textarea class="textarea" title="상품 설명" cols="30" rows="10" id="subsvcDc" name="subsvcDc">${resultMap.subsvcDtl.subsvcDc}</textarea>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>모바일용 상세 설명 설정</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="custom-radio-container mr-5">
|
||||
<div class="custom-radio">
|
||||
<input type="radio" id="mblSubsvcDcPcSameAt1" name="mblSubsvcDcPcSameAt" value="Y" <c:if test="${ resultMap.subsvcDtl.mblSubsvcDcPcSameAt eq 'Y'}">checked</c:if>>
|
||||
<label for="mblSubsvcDcPcSameAt1">PC와 동일</label>
|
||||
</div>
|
||||
<div class="custom-radio">
|
||||
<input type="radio" id="mblSubsvcDcPcSameAt2" name="mblSubsvcDcPcSameAt" value="N" <c:if test="${ resultMap.subsvcDtl.mblSubsvcDcPcSameAt eq 'N'}">checked</c:if>>
|
||||
<label for="mblSubsvcDcPcSameAt2">PC와 모바일 다르게 설정</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="mobileSubsvcCn">
|
||||
<th>모바일용 상세 설명<span class="red-7">*</span></th>
|
||||
<td>
|
||||
<div class="td-inner"><textarea class="textarea" title="모바일용 상품 설명" cols="30" rows="10" id="mblSubsvcDc" name="mblSubsvcDc">${resultMap.subsvcDtl.mblSubsvcDc}</textarea>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</form>
|
||||
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="modalDiv">
|
||||
|
||||
</div>
|
||||
<%--관리자 수정이력 내역보기 모달 --%>
|
||||
<div id="logDiv"></div>
|
||||
</main>
|
||||
<script>
|
||||
// Dropzone 파일업로드
|
||||
if ($("#img-dropzone").length > 0) {
|
||||
Dropzone.autoDiscover = false;
|
||||
var imgDropzone = new Dropzone("#img-dropzone", {
|
||||
url: "/file-upload",
|
||||
maxFiles: 1,
|
||||
maxFilesize: 20,
|
||||
autoProcessQueue: false,
|
||||
addRemoveLinks: true,
|
||||
dictDefaultMessage: "클릭하거나 파일을 여기로 드래그하세요",
|
||||
dictRemoveFile: "삭제",
|
||||
acceptedFiles: "${acceptFileExtensions}",
|
||||
dictCancelUpload: "취소",
|
||||
dictCancelUploadConfirmation: "업로드를 취소하시겠습니까?",
|
||||
dictInvalidFileType: "이 파일은 업로드할 수 없습니다.",
|
||||
dictFileTooBig: "파일이 너무 큽니다. ({{filesize}}MB). 최대 파일 크기: {{maxFilesize}}MB.",
|
||||
dictMaxFilesExceeded: "파일을 더 이상 추가할 수 없습니다.",
|
||||
dictResponseError: "서버에서 응답을 받지 못했습니다.",
|
||||
});
|
||||
}
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -752,7 +752,6 @@
|
||||
|
||||
if ('25' === data.ordrSttusCd) {
|
||||
header += ' <button type="button" id="ordrSttus35" class="btn-' + currTr + ' btn prep xsm">상품준비</button>';
|
||||
header += ' <button type="button" onclick="fn_dlivy_procs_popup_check_ordrs(\'/mngr/ordr/dlivy/selectOrdrDlivyPopupForm\',\'팝업\',\'1400\',\'840\');" class="btn primary xsm btn-dlivy-procs-pop-' + data.ordrSttusCd + '">출고처리</button>';
|
||||
/* header += ' <button type="button" id="ordrSttus85" class="btn-' + currTr + ' btn gray xsm">결제취소</button>'; */
|
||||
}
|
||||
|
||||
@@ -1348,7 +1347,6 @@
|
||||
|
||||
if ('25' === prevOrderSttusCd) {
|
||||
footer += ' <button type="button" id="ordrSttus35" class="btn-' + prevTrClass + ' btn prep xsm">상품준비</button>';
|
||||
footer += ' <button type="button" onclick="fn_dlivy_procs_popup_check_ordrs(\'/mngr/ordr/dlivy/selectOrdrDlivyPopupForm\',\'팝업\',\'1400\',\'840\');" class="btn primary xsm btn-dlivy-procs-pop-' + data.ordrSttusCd + '">출고처리</button>';
|
||||
/* footer += ' <button type="button" id="ordrSttus85" class="btn-' + currTr + ' btn gray xsm">결제취소</button>'; */
|
||||
}
|
||||
|
||||
|
||||
@@ -1783,7 +1783,6 @@
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
<button type="button" class="btn-ordr-sttus-35 btn gray">상품 준비</button>
|
||||
<button type="button" onclick="fn_dlivy_procs_popup_check_ordrs('${dtl.ordrInnb}');" class="btn primary">출고 처리</button>
|
||||
</c:if>
|
||||
<c:if test="${'35' eq dtl.ordrSttusCd && dtl.sknEnvrnCd ne 'POS'}"> <!-- 상품준비 -->
|
||||
<a href="javascript:void(0);" id="canclPayment" class="btn outline">결제 취소</a>
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
|
||||
<%@ page import="java.util.Date" %>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui" %>
|
||||
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld" %>
|
||||
<%--
|
||||
Class Name : SubsvcOrderGoodsInfoListPop.jsp
|
||||
Description : 구독서비스 구독자조회 - 배송상품 목록 팝업
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2026-02-09 jazz 최초 생성
|
||||
--%>
|
||||
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.cdnurl')" var="cdnurl"/>
|
||||
<div id="subsvcOrdrrGoodsInfoListPop" class="modal" style="max-width: 700px;">
|
||||
<div class="modal-header">
|
||||
<h4>배송상품 목록</h4>
|
||||
</div>
|
||||
<br>
|
||||
<div class="modal-content">
|
||||
<div class="form-control-container mb-10">
|
||||
<div class="left">
|
||||
</div>
|
||||
<div class="center">
|
||||
</div>
|
||||
<div class="right">
|
||||
</div>
|
||||
</div>
|
||||
<div class=" table-wrapper mb-40">
|
||||
<table class="table">
|
||||
<caption>주문자/주문번호 정보</caption>
|
||||
<colgroup>
|
||||
<col style="width: 15%;">
|
||||
<col style="width: 35%;">
|
||||
<col style="width: 15%;">
|
||||
<col style="width: 35%;">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>구독서비스</th>
|
||||
<td>
|
||||
<div class="td-inner"><c:out value="${resultMap.subsvcInfo.subsvcNm}"/></div>
|
||||
</td>
|
||||
<th>기수명</th>
|
||||
<td>
|
||||
<div class="td-inner"><c:out value="${resultMap.subsvcInfo.subsvcGnr}"/>기(<c:out value="${resultMap.subsvcInfo.subsvcGnrNm}"/>)</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<br/>
|
||||
<div class=" table-wrapper mb-40">
|
||||
<table class="table vertical" style="max-height: 200px;">
|
||||
<caption>배송정보</caption>
|
||||
<colgroup>
|
||||
<col style="width: 15%;">
|
||||
<col style="width: 20%;">
|
||||
<col style="width: 50%;">
|
||||
<col style="width: 15%;">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>순번</th>
|
||||
<th colspan="2">상품명</th>
|
||||
<th>적용횟수</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<c:choose>
|
||||
<c:when test="${ not empty resultMap.list }">
|
||||
<c:forEach items="${ resultMap.list }" var="goods" varStatus="status">
|
||||
<tr>
|
||||
<td><c:out value="${goods.rnum}"/></td>
|
||||
<td><img src='<c:out value="${cdnurl}${goods.goodsImgCours}"/>' onerror="this.src='/pc/images/image_placeholder.png'" alt='<c:out value="${goods.goodsNm}"/>' width="56px" height="56px"></td>
|
||||
<td>
|
||||
<div class="order-section__product-info">
|
||||
<span class="order-section__product-productTitle"><c:out value="${goods.goodsNm}"/></span>
|
||||
<span class="option-text">
|
||||
<span class="option-badge">옵션</span> <c:out value="${goods.optnNm1}"/>:<c:out value="${goods.optnVal1}"/>
|
||||
</span>
|
||||
</div>
|
||||
</td>
|
||||
<td><fmt:formatNumber value="${goods.applyCnt}" pattern="#,###"/></td>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<tr>
|
||||
<td colspan="100%"><spring:message code="common.nodata"/></td>
|
||||
</tr>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a href="#" id="btn_close_modal_bbsC" rel="modal:close" class="btn outline">닫기</a>
|
||||
</div>
|
||||
<a href="#close-modal" rel="modal:close" class="close-modal ">Close</a>
|
||||
</div>
|
||||
<script src="/mngr/js/script.js" defer=""></script>
|
||||
@@ -0,0 +1,106 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
|
||||
<%@ page import="java.util.Date" %>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui" %>
|
||||
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld" %>
|
||||
<%--
|
||||
Class Name : SubsvcOrderMbrInfoListPop.jsp
|
||||
Description : 구독서비스 구독자조회 - 구독자 목록 팝업
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2026-02-09 jazz 최초 생성
|
||||
--%>
|
||||
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.cdnurl')" var="cdnurl"/>
|
||||
<div id="subsvcOrderMbrInfoListPop" class="modal" style="max-width: 700px;">
|
||||
<div class="modal-header">
|
||||
<h4>구독자 목록</h4>
|
||||
</div>
|
||||
<br>
|
||||
<div class="modal-content">
|
||||
<div class="form-control-container mb-10">
|
||||
<div class="left">
|
||||
</div>
|
||||
<div class="center">
|
||||
</div>
|
||||
<div class="right">
|
||||
</div>
|
||||
</div>
|
||||
<div class=" table-wrapper mb-40">
|
||||
<table class="table">
|
||||
<caption>구독서비스 정보</caption>
|
||||
<colgroup>
|
||||
<col style="width: 15%;">
|
||||
<col style="width: 35%;">
|
||||
<col style="width: 15%;">
|
||||
<col style="width: 35%;">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>구독서비스</th>
|
||||
<td>
|
||||
<div class="td-inner"><c:out value="${resultMap.subsvcInfo.subsvcNm}"/></div>
|
||||
</td>
|
||||
<th>기수명</th>
|
||||
<td>
|
||||
<div class="td-inner"><c:out value="${resultMap.subsvcInfo.subsvcGnr}"/>기(<c:out value="${resultMap.subsvcInfo.subsvcGnrNm}"/>)</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<br/>
|
||||
<div class=" table-wrapper mb-40">
|
||||
<table class="table vertical" style="max-height: 200px;">
|
||||
<caption>배송정보</caption>
|
||||
<colgroup>
|
||||
<col style="width: 10%;">
|
||||
<col style="width: 20%;">
|
||||
<col style="width: 35%;">
|
||||
<col style="width: 15%;">
|
||||
<col style="width: 20%;">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>순번</th>
|
||||
<th>주문번호</th>
|
||||
<th>구독자</th>
|
||||
<th>최종차수</th>
|
||||
<th>최종처리일</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<c:choose>
|
||||
<c:when test="${ not empty resultMap.list }">
|
||||
<c:forEach items="${ resultMap.list }" var="mbr" varStatus="status">
|
||||
<tr>
|
||||
<td><c:out value="${mbr.rnum}"/></td>
|
||||
<td><c:out value="${mbr.ordrInnb}"/></td>
|
||||
<td><c:out value="${mbr.mbrNm}"/> (<c:out value="${mbr.mbrId}"/>/<c:out value="${mbr.grade}"/>)</td>
|
||||
<td><c:out value="${mbr.lastProcsOdr}"/>회</td>
|
||||
<fmt:parseDate value="${mbr.lastPrcsDt}" pattern="yyyy-MM-dd HH:mm:ss" var="parsePrcsDt"/>
|
||||
<fmt:formatDate value="${parsePrcsDt }" var="formatPrcsDt" pattern="yyyy-MM-dd"/>
|
||||
<td><c:out value="${formatPrcsDt}"/></td>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<tr>
|
||||
<td colspan="100%"><spring:message code="common.nodata"/></td>
|
||||
</tr>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a href="#" id="btn_close_modal_bbsC" rel="modal:close" class="btn outline">닫기</a>
|
||||
</div>
|
||||
<a href="#close-modal" rel="modal:close" class="close-modal ">Close</a>
|
||||
</div>
|
||||
<script src="/mngr/js/script.js" defer=""></script>
|
||||
@@ -0,0 +1,124 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
|
||||
<%@ page import="java.util.Date" %>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui" %>
|
||||
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld" %>
|
||||
<%--
|
||||
Class Name : subsvcOrdrDlvyListPop.jsp
|
||||
Description : 구독서비스 상품준비 관리 배송내역 팝업
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2026-02-07 jazz 최초 생성
|
||||
--%>
|
||||
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.cdnurl')" var="cdnurl"/>
|
||||
<div id="subsvcOrdrDlvyListPop" class="modal" style="max-width: 1000px;">
|
||||
<div class="modal-header">
|
||||
<h4>배송내역</h4>
|
||||
</div>
|
||||
<br>
|
||||
<div class="modal-content">
|
||||
<div class="form-control-container mb-10">
|
||||
<div class="left">
|
||||
</div>
|
||||
<div class="center">
|
||||
</div>
|
||||
<div class="right">
|
||||
</div>
|
||||
</div>
|
||||
<div class=" table-wrapper mb-40">
|
||||
<table class="table">
|
||||
<caption>주문자/주문번호 정보</caption>
|
||||
<colgroup>
|
||||
<col style="width: 15%;">
|
||||
<col style="width: 35%;">
|
||||
<col style="width: 15%;">
|
||||
<col style="width: 35%;">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>주문자</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<c:if test="${not empty resultMap.list}">
|
||||
${resultMap.list[0].mbrNm} (${resultMap.list[0].mbrId}/${resultMap.list[0].grade})
|
||||
</c:if>
|
||||
</div>
|
||||
</td>
|
||||
<th>주문번호</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<c:if test="${not empty resultMap.list}">${resultMap.list[0].ordrInnb}</c:if>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<br/>
|
||||
<div class=" table-wrapper mb-40">
|
||||
<table class="table vertical" style="max-height: 200px;">
|
||||
<caption>배송정보</caption>
|
||||
<colgroup>
|
||||
<col style="width: 5%;">
|
||||
<col style="width: 10%;">
|
||||
<col style="width: 10%;">
|
||||
<col style="width: 35%;">
|
||||
<col style="width: 15%;">
|
||||
<col style="width: 15%;">
|
||||
<col style="width: 10%;">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>차수</th>
|
||||
<th>발생일자</th>
|
||||
<th colspan="2">상품명</th>
|
||||
<th>정가</th>
|
||||
<th>판매가</th>
|
||||
<th>상태</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<c:choose>
|
||||
<c:when test="${ not empty resultMap.list }">
|
||||
<c:forEach items="${ resultMap.list }" var="dlvy" varStatus="status">
|
||||
<tr>
|
||||
<td><c:out value="${dlvy.rnum}"/></td>
|
||||
<fmt:parseDate value="${dlvy.procsDt}" pattern="yyyy-MM-dd HH:mm:ss" var="parsePrcsDt"/>
|
||||
<fmt:formatDate value="${parsePrcsDt }" var="formatPrcsDt" pattern="yyyy-MM-dd"/>
|
||||
<td><c:out value="${formatPrcsDt}"/></td>
|
||||
<td><img src='<c:out value="${cdnurl}${dlvy.goodsImgCours}"/>' onerror="this.src='/pc/images/image_placeholder.png'" alt='<c:out value="${dlvy.goodsNm}"/>' width="56px" height="56px"></td>
|
||||
<td>
|
||||
<div class="order-section__product-info">
|
||||
<span class="order-section__product-productTitle"><c:out value="${dlvy.goodsNm}"/></span>
|
||||
<span class="option-text">
|
||||
<span class="option-badge">옵션</span> <c:out value="${dlvy.optnNm1}"/>:<c:out value="${dlvy.optnVal1}"/>
|
||||
</span>
|
||||
</div>
|
||||
</td>
|
||||
<td><fmt:formatNumber value="${dlvy.cnsmrpric}" pattern="#,###"/></td>
|
||||
<td><fmt:formatNumber value="${dlvy.slepric}" pattern="#,###"/></td>
|
||||
<td><c:out value="${dlvy.ordrSttus}"/></td>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<tr>
|
||||
<td colspan="100%"><spring:message code="common.nodata"/></td>
|
||||
</tr>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a href="#" id="btn_close_modal_bbsC" rel="modal:close" class="btn outline">닫기</a>
|
||||
</div>
|
||||
<a href="#close-modal" rel="modal:close" class="close-modal ">Close</a>
|
||||
</div>
|
||||
<script src="/mngr/js/script.js" defer=""></script>
|
||||
@@ -0,0 +1,130 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui" %>
|
||||
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld" %>
|
||||
|
||||
<%--
|
||||
Class Name : SubsvcOrdrList.jsp
|
||||
Description : 구독서비스 상품준비 목록
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2026-02-05 jazz 최초 생성
|
||||
--%>
|
||||
<section class="content-section">
|
||||
<div class="form-control-container">
|
||||
<div class="left">
|
||||
<div class="search-number">
|
||||
<span class="search-number__text">총 <strong><c:out value="${ resultMap.paginationInfo.totalRecordCount }"/></strong>건</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="center">
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="select-box">
|
||||
<select title="정렬순서" name="sortDvView" id="sortDvView" onchange="fn_select_list(1);return false;">
|
||||
<option value="subsvcGnrAsc" <c:if test="${resultMap.paramVO.sortDv eq 'subsvcGnrAsc'}">selected="selected"</c:if>>구독서비스+기수 오름차순</option>
|
||||
<option value="subsvcGnrDesc" <c:if test="${resultMap.paramVO.sortDv eq 'subsvcGnrDesc'}">selected="selected"</c:if>>구독서비스+기수 내림차순</option>
|
||||
<option value="mbrAsc" <c:if test="${resultMap.paramVO.sortDv eq 'mbrAsc'}">selected="selected"</c:if>>주문자 오름차순</option>
|
||||
<option value="mbrDesc" <c:if test="${resultMap.paramVO.sortDv eq 'mbrDesc'}">selected="selected"</c:if>>주문자 내림차순</option>
|
||||
<option value="ordrAsc" <c:if test="${resultMap.paramVO.sortDv eq 'ordrAsc'}">selected="selected"</c:if>>주문번호 오름차순</option>
|
||||
<option value="ordrDesc" <c:if test="${resultMap.paramVO.sortDv eq 'ordrDesc'}">selected="selected"</c:if>>주문번호 내림차순</option>
|
||||
<option value="lastPrcsDtAsc" <c:if test="${resultMap.paramVO.sortDv eq 'lastPrcsDtAsc'}">selected="selected"</c:if>>최종처리일 오름차순</option>
|
||||
<option value="lastPrcsDtDesc" <c:if test="${resultMap.paramVO.sortDv eq 'lastPrcsDtDesc'}">selected="selected"</c:if>>최종처리일 내림차순</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="select-box">
|
||||
<select id="pageUnitView" name="pageUnitView" title="페이지당 출력될 목록건수" onchange="fn_select_list(1,this.value);return false;">
|
||||
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
|
||||
<option value="<c:out value="${ pageUnit }"/>"
|
||||
<c:if test="${ resultMap.paginationInfo.recordCountPerPage eq pageUnit}">selected="selected"</c:if>>
|
||||
<c:out value="${ pageUnit }"/>개씩
|
||||
</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="horizontal-line">
|
||||
<div class="form-control-container">
|
||||
<div class="left">
|
||||
<button class="btn sm dark" onclick="fn_allOrdrReady_check();return false;">상품준비 일괄처리</button>
|
||||
</div>
|
||||
<div class="center">
|
||||
</div>
|
||||
</div>
|
||||
<hr class="spacing">
|
||||
<div class="table-wrapper">
|
||||
<table class="table vertical">
|
||||
<caption>구독서비스 목록</caption>
|
||||
<colgroup>
|
||||
<col style="width: 4%;">
|
||||
<col style="width: 20%;">
|
||||
<col style="width: 6%;">
|
||||
<col style="width: 10%;">
|
||||
<col style="width: 15%;">
|
||||
<col style="width: 10%;">
|
||||
<col style="width: 10%;">
|
||||
<col style="width: 10%;">
|
||||
<col style="width: 10%;">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
<label class="b-checkbox checkbox is-medium ">
|
||||
<input type="checkbox" id="checkAll" value="">
|
||||
<span class="check"></span>
|
||||
</label>
|
||||
</th>
|
||||
<th>구독서비스</th>
|
||||
<th>기수</th>
|
||||
<th>기수명</th>
|
||||
<th>주문자</th>
|
||||
<th>주문번호</th>
|
||||
<th>처리 차수</th>
|
||||
<th>최종 차수</th>
|
||||
<th>최종 처리일</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<c:choose>
|
||||
<c:when test="${ not empty resultMap.list }">
|
||||
<c:forEach items="${ resultMap.list }" var="subsvcOrdr" varStatus="status">
|
||||
<tr<c:if test="${lastProcsOdr > mbrLastProcsOdr}"> class="sendOut-info__reseller"</c:if>>
|
||||
<td>
|
||||
<label class="b-checkbox checkbox is-medium check-all">
|
||||
<input type="checkbox" name="arrCheck" class="arrCheck" value="${subsvcOrdr.ordrInnb}@${subsvcOrdr.ordrGoodsInnb}@${subsvcOrdr.ordrGoodsOptnInnb}@${subsvcOrdr.ordrDlvyInnb}">
|
||||
<span class="check"></span>
|
||||
</label>
|
||||
</td>
|
||||
<td><c:out value="${subsvcOrdr.subsvcNm}"/></td>
|
||||
<td><c:out value="${subsvcOrdr.subsvcGnr}"/>기</td>
|
||||
<td><c:out value="${subsvcOrdr.subsvcGnrNm}"/></td>
|
||||
<td><c:out value="${subsvcOrdr.mbrNm}"/></br>(<c:out value="${subsvcOrdr.mbrId}"/>/<c:out value="${subsvcOrdr.grade}"/>)</td>
|
||||
<td><c:out value="${subsvcOrdr.ordrInnb}"/></td>
|
||||
<td><c:out value="${subsvcOrdr.curtProcsOdr}"/>회</td>
|
||||
<td><c:out value="${subsvcOrdr.mbrLastProcsOdr}"/>회 <button class="btn xsm outline light-gray" type="button" onclick="fn_open_modal('#modalDiv','#subsvcOrdrDlvyListPop','<c:url value ='/mngr/ordr/subsvc/selectSubsvcOrdrDlvyListPop'/>',{'ordrInnb':'<c:out value="${subsvcOrdr.ordrInnb}"/>'}); return false;">배송내역</button></td>
|
||||
<fmt:parseDate value="${subsvcOrdr.lastPrcsDt}" pattern="yyyy-MM-dd HH:mm:ss" var="parseLastPrcsDt"/>
|
||||
<fmt:formatDate value="${parseLastPrcsDt }" var="formatLastPrcsDt" pattern="yyyy-MM-dd"/>
|
||||
<td><c:out value="${ formatLastPrcsDt }"/></td>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<tr>
|
||||
<td colspan="100%"><spring:message code="common.nodata"/></td>
|
||||
</tr>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="pagination__container">
|
||||
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_list"/>
|
||||
</div>
|
||||
@@ -0,0 +1,513 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui" %>
|
||||
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld" %>
|
||||
|
||||
<%--
|
||||
Class Name : SubsvcOrdrListFrom.jsp
|
||||
Description : 구독서비스 상품준비 목록 조회 폼
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2026-02-05 jazz 최초 생성
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>일반 관리자</title>
|
||||
<%@ include file="/WEB-INF/views/comm/mngr/Include.jsp"%>
|
||||
<spring:eval expression="@environment.getProperty('currency-unit.default')" var="curUnit"/>
|
||||
</head>
|
||||
<script>
|
||||
var initFlag = true;
|
||||
$(document).ready(function () {
|
||||
let pageIndex = $("#pageIndex").val();
|
||||
let pageUnit = $("#pageUnit").val();
|
||||
let srchSelSubsvcNm = $('#srchSelSubsvcNm').val();
|
||||
// event 제어
|
||||
fn_event();
|
||||
|
||||
if(srchSelSubsvcNm != ''){
|
||||
fn_getsubsvcGnr(srchSelSubsvcNm);
|
||||
}else{
|
||||
// 목록 조회
|
||||
fn_select_list(pageIndex, pageUnit);
|
||||
}
|
||||
|
||||
// 엔터키 검색
|
||||
$('#listForm').on('keydown', function (event) {
|
||||
if (event.keyCode === 13) {
|
||||
event.preventDefault();
|
||||
fn_select_list(1);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/*********************************************************
|
||||
* 목록 조회
|
||||
******************************************************** */
|
||||
const fn_select_list = function (pageIndex, pageUnit) {
|
||||
let dataStr;
|
||||
|
||||
if (!pageIndex) {
|
||||
$('#pageIndex').val(1);
|
||||
} else {
|
||||
$('#pageIndex').val(pageIndex);
|
||||
}
|
||||
//정렬기준 셋팅
|
||||
if(typeof $('#sortDvView') !== undefined && $('#sortDvView').val() !== undefined){
|
||||
$('#sortDv').val($('#sortDvView').val());
|
||||
}
|
||||
//한페이지 목록개수 셋팅
|
||||
if(typeof $('#pageUnitView') !== undefined && $('#pageUnitView').val() !== undefined){
|
||||
$('#pageUnit').val($('#pageUnitView').val());
|
||||
}
|
||||
|
||||
if (!pageUnit) {
|
||||
dataStr = $('#listForm').serialize();
|
||||
} else {
|
||||
if ($('#pageUnit').length) {
|
||||
$('#pageUnit').val(pageUnit);
|
||||
dataStr = $('#listForm').serialize();
|
||||
} else {
|
||||
dataStr = $('#listForm').serialize() + '&pageUnit=' + pageUnit;
|
||||
}
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
type: "post",
|
||||
url: "<c:url value="/mngr/ordr/subsvc/selectSubsvcOrdrList"/>",
|
||||
data: dataStr,
|
||||
success: function (resultHtml) {
|
||||
$('#pageDiv').html(resultHtml);
|
||||
$('#sortDv').val($('#sortDvView').val());
|
||||
$('#pageUnitView').niceSelect();
|
||||
$('#sortDvView').niceSelect();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/* 현제uri에 프로토콜, 호스트, 쿼리스티링을 제외하여 history갱신 */
|
||||
history.replaceState({}, null, location.pathname);
|
||||
|
||||
/* ****************************
|
||||
* event 제어
|
||||
******************************/
|
||||
const fn_event = function () {
|
||||
/* 검색조건 구독서비스 선택 시 회차 조회 이벤트*/
|
||||
$(document).on('change', '#srchSelSubsvcNm', function(){
|
||||
var srchSelSubsvcNm = $(this).val();
|
||||
if(fn_is_empty(srchSelSubsvcNm)){
|
||||
// 회차 초기화
|
||||
$('#srchSelSubsvcGnr').empty().append('<option value="">전체</option>').niceSelect('update');
|
||||
}else{
|
||||
//해당구독서비스 기수조회
|
||||
fn_getsubsvcGnr(srchSelSubsvcNm);
|
||||
}
|
||||
});
|
||||
|
||||
/* 목록 > 전체선택 체인지 이벤트 */
|
||||
$(document).on('change', '#checkAll', function () {
|
||||
let checkbox = $(this).closest('table').find('input[name="arrCheck"]');
|
||||
|
||||
$(checkbox).prop('checked', false);
|
||||
$(checkbox).prop('checked', $(this).is(':checked'));
|
||||
});
|
||||
}
|
||||
|
||||
/* ****************************
|
||||
* 해당구독서비스 기수조회 AJAX
|
||||
******************************/
|
||||
const fn_getsubsvcGnr = function (srchSelSubsvcNm) {
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: '<c:url value="/mngr/goods/subsvc/selectSrchSubsvcGnrListAjax"/>',
|
||||
data: {
|
||||
'srchSelSubsvcNm': srchSelSubsvcNm
|
||||
},
|
||||
success: function (data) {
|
||||
if (data.resBody != null) {
|
||||
const result = JSON.parse(data.resBody.result);
|
||||
const srchSubsvcGnrList = result.srchSubsvcGnrList;
|
||||
if (srchSubsvcGnrList.length > 0) {
|
||||
// 회차 초기화
|
||||
$('#srchSelSubsvcGnr').empty().append('<option value="">전체</option>').niceSelect('update');
|
||||
// $('#srchSubsvcGnr option').filter(function() {
|
||||
// return $(this).val() !== '';
|
||||
// }).remove();
|
||||
|
||||
for (let i = 0; i < srchSubsvcGnrList.length; i++) {
|
||||
const srchSubsvcGnr = srchSubsvcGnrList[i];
|
||||
var check = "";
|
||||
if(srchSubsvcGnr.subsvcGnr == '${resultMap.paramVO.srchSelSubsvcGnr}'){
|
||||
check ="selected"
|
||||
}
|
||||
|
||||
if(initFlag == true){
|
||||
$('#srchSelSubsvcGnr').append('<option value="' + srchSubsvcGnr.subsvcGnr + '" '+ check+'>' + srchSubsvcGnr.subsvcGnrNm + '</option>');
|
||||
fn_select_list();
|
||||
initFlag = false;
|
||||
}else{
|
||||
$('#srchSelSubsvcGnr').append('<option value="' + srchSubsvcGnr.subsvcGnr + '">' + srchSubsvcGnr.subsvcGnrNm + '</option>');
|
||||
|
||||
}
|
||||
}
|
||||
$('#srchSelSubsvcGnr').niceSelect('update');
|
||||
}
|
||||
}
|
||||
},
|
||||
error: function (data) {
|
||||
fn_proc_error_message(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 체크박스 전체 처리
|
||||
* */
|
||||
const fn_change_event = function (_target, _arg) {
|
||||
if (_arg === 'all') {
|
||||
|
||||
if ($('#' + _target + '-all').is(':checked')) {
|
||||
$('[name=' + _target + ']').prop('checked', true);
|
||||
} else {
|
||||
$('[name=' + _target + ']').prop('checked', false);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
let chkCnt = $('[name=' + _target + ']:checked').length;
|
||||
let allCnt = $('[name=' + _target + ']').length;
|
||||
if (chkCnt !== allCnt && $('#' + _target + '-all').is(':checked')) {
|
||||
$('#' + _target + '-all').prop('checked', false);
|
||||
} else if (chkCnt === allCnt) {
|
||||
$('#' + _target + '-all').prop('checked', true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************
|
||||
* 선택된 대상자 구독서비스 상품준비 일괄처리 AJAX
|
||||
*********************************************************/
|
||||
const fn_allOrdrReady_check = function () {
|
||||
|
||||
let url = '<c:url value="/mngr/ordr/subsvc/updateSubsvcOrdrReady"/>';
|
||||
let check = $("input[name='arrCheck']:checked");
|
||||
let param = $('#listForm').serialize();
|
||||
|
||||
if (check.length === 0) {
|
||||
alert("선택된 대상이 없습니다");
|
||||
return false;
|
||||
}
|
||||
|
||||
/** 출고상품 선택 확인*/
|
||||
if($('#goodsInnb').val() == undefined){
|
||||
alert("출고상품 선택이 필요합니다");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (confirm('선택된 주문을 상품준비 일괄처리 하시겠습니까?')) {
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: url,
|
||||
data: param,
|
||||
dataType: "json",
|
||||
success: function (data) {
|
||||
const message = JSON.parse(data.resBody.result).message;
|
||||
if(message == "success"){
|
||||
alert('<spring:message code="success.common.process"/>');
|
||||
fn_select_list();
|
||||
}else{
|
||||
alert('<spring:message code="fail.common.save"/>');
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* 관리자 주문 > 상품조회 > 검색조건 > 날짜 선택 이벤트 */
|
||||
$(document).on('click', '.dateRange-btn', function () {
|
||||
const date = $(this).attr('id');
|
||||
|
||||
$('.dateRange-btn').removeClass('selected');
|
||||
$('#' + date).addClass('selected');
|
||||
|
||||
const datepicker = $(this).closest('.td-inner').find('.datepicker');
|
||||
const start = $(datepicker[0]).attr('id');
|
||||
const end = $(datepicker[1]).attr('id');
|
||||
|
||||
if ('allDays' === date) {
|
||||
$('#' + start + ', #' + end).val('');
|
||||
|
||||
$('#datePeriod').val(date);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
fn_set_date(start, end, end, date);
|
||||
|
||||
$('#datePeriod').val(date);
|
||||
});
|
||||
|
||||
//카테고리 선택시 카테고리 아이디 저장(검색용)
|
||||
$(document).on('change', 'select[id^=ctgryDepth]', function () {
|
||||
const ctgryOptn = $(this).val()
|
||||
|
||||
if(!fn_is_empty(ctgryOptn)){
|
||||
$('#ctgryId').val(ctgryOptn)
|
||||
}else{
|
||||
//value가 ''인 카테고리 선택할경우
|
||||
let currentCtgryDepth = parseInt($(this).attr('id').replace('ctgryDepth', ''));
|
||||
|
||||
//1차 카테고리가 아닐 경우 이전 카테고리 번호 가져오기
|
||||
if(currentCtgryDepth !== 1){
|
||||
$('#ctgryId').val($('#ctgryDepth' + (currentCtgryDepth - 1)).val())
|
||||
}else{
|
||||
//1차 카테고리 일경우 카테고리 번호 비우기
|
||||
$('#ctgryId').val('')
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
//초기화버튼
|
||||
$(document).on('click', '#resetBtn', function () {
|
||||
$('#listForm')[0].reset();
|
||||
$('#srchSelSubsvcNm').niceSelect('update');
|
||||
$('#srchSelSubsvcNm').trigger("change");
|
||||
$('#srchSelSubsvcGnr').niceSelect('update');
|
||||
|
||||
fn_select_list(1);
|
||||
})
|
||||
|
||||
let selected = [];
|
||||
|
||||
/*********************************************************
|
||||
* 상품 검색 팝업 > 상품 목록 조회
|
||||
* param : pageIndex, selected
|
||||
******************************************************** */
|
||||
const fn_goods_search_popup_list = function (pageIndex, selected) {
|
||||
let dataStr;
|
||||
if (!pageIndex) {
|
||||
$('#pageIndex').val(1);
|
||||
} else {
|
||||
$('#pageIndex').val(pageIndex);
|
||||
}
|
||||
|
||||
$('#popupListForm').find('input[name=pageIndex]').eq(0).val(pageIndex);
|
||||
const popupListForm = $("#popupListForm").serialize();
|
||||
|
||||
$.ajax({
|
||||
type: "post",
|
||||
url: "<c:url value="/mngr/goods/goodsmngr/selectGoodsSrchPopupList"/>",
|
||||
data: popupListForm,
|
||||
success: function (resultHtml) {
|
||||
$('#goodsList').empty();
|
||||
$('#goodsList').html(resultHtml);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/*********************************************************
|
||||
* 상품검색 팝업에서 선택된 상품을 출고상품에 셋팅
|
||||
* param 없음
|
||||
******************************************************** */
|
||||
function fn_select_goods_search() {
|
||||
let selected = [];
|
||||
$('#appendList tr').each(function () {
|
||||
const goodsId = $(this).attr('id').replace('choiseListId', '');
|
||||
const goodsOptnInnb = $(this).find('input[name="goodsOptnInnb"]').val();
|
||||
const optnTy = $(this).find('input[name="optnTy"]').val();
|
||||
const goodsImg = $(this).find('input[name="goodsImgCours"]').val();
|
||||
const goodsNm = $(this).find('input[name="goodsNm"]').val();
|
||||
const goodsPrice = $(this).find('input[name="slepric"]').val();
|
||||
const goodsSttusNm = $(this).find('input[name="goodsSttusNm"]').val();
|
||||
const expsrNm = $(this).find('input[name="expsrNm"]').val();
|
||||
|
||||
selected.push({
|
||||
goodsId: goodsId,
|
||||
goodsOptnInnb: goodsOptnInnb,
|
||||
optnTy: optnTy,
|
||||
goodsImg: goodsImg,
|
||||
goodsNm: goodsNm,
|
||||
goodsPrice: goodsPrice,
|
||||
goodsSttusNm: goodsSttusNm,
|
||||
expsrNm: expsrNm
|
||||
});
|
||||
});
|
||||
|
||||
// 각 화면에 맞춰서 HTML 변경 START
|
||||
var tableBody = $("#parentGoodsContainer");
|
||||
tableBody.empty();
|
||||
|
||||
selected.forEach((good, index) => {
|
||||
if(index == 0) {
|
||||
var productHtml = `
|
||||
<div class="product-group__item">
|
||||
<input type="hidden" id="goodsInnb" name="goodsInnb" value="` + good.goodsId + `">
|
||||
<input type="hidden" id="goodsOptnInnb" name="goodsOptnInnb" value="` + good.goodsOptnInnb + `">
|
||||
<input type="hidden" id="optnTy" name="optnTy" value="` + good.optnTy + `">
|
||||
<span class="product-group__item-number">` + (index + 1) + `</span>
|
||||
<div class="product-group__image">
|
||||
<img src="` + good.goodsImg + `" width="140" alt="` + good.goodsNm + `"
|
||||
onerror="this.src='/mngr/images/image_placeholder.png'"
|
||||
>
|
||||
</div>
|
||||
<div class="product-group__description">
|
||||
<p>` + good.goodsNm + `</p>
|
||||
<p class="product-group__description-price">` + fn_format_comma(good.goodsPrice) + `${curUnit}</p>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
tableBody.append(productHtml);
|
||||
});
|
||||
// 각 화면에 맞춰서 HTML 변경 END
|
||||
|
||||
fn_close_modal('product-search');
|
||||
}
|
||||
|
||||
/*********************************************************
|
||||
* 배송내역 팝업
|
||||
*********************************************************/
|
||||
const fn_select_dlvy_pop = function (ordrInnb) {
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: "<c:url value ='/mngr/ordr/subsvc/selectSubsvcOrdrDlvyListPop'/>",
|
||||
data: {ordrInnb: ordrInnb},
|
||||
success: function (data) {
|
||||
alert(data);
|
||||
$("#modalDiv").empty();
|
||||
$("#modalDiv").html(data);
|
||||
$("#board-list-registration").modal();
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
<body>
|
||||
<%@ include file="/WEB-INF/views/comm/mngr/Header.jsp"%>
|
||||
<main class="main">
|
||||
<%@ include file="/WEB-INF/views/comm/mngr/Left.jsp"%>
|
||||
<div class="content">
|
||||
<div class="content__inner">
|
||||
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
|
||||
<div class="page-title">
|
||||
<h2 class="page-title__title">구독서비스 상품준비 관리</h2>
|
||||
<div class="page-title__btn-container">
|
||||
</div>
|
||||
</div>
|
||||
<form id='listForm' name="listForm" method="post" action="<c:url value="/mngr/goods/subsvc/selectSubsvcList"/>">
|
||||
<input type="hidden" id="pageIndex" name="pageIndex" value="${ resultMap.paramVO.pageIndex }"/>
|
||||
<input type="hidden" id="sortDv" name="sortDv" value="${ resultMap.paramVO.sortDv }">
|
||||
<input type="hidden" id="pageUnit" name="pageUnit" value="${ resultMap.paramVO.pageUnit }">
|
||||
<input type="hidden" id="subsvcInnb" name="subsvcInnb" value="">
|
||||
<section class="content-section" id="search-section">
|
||||
<div class="table-wrapper">
|
||||
<table class="table">
|
||||
<colgroup>
|
||||
<col style="width: 12%;">
|
||||
<col>
|
||||
<col style="width: 12%;">
|
||||
<col>
|
||||
</colgroup>
|
||||
<tr>
|
||||
<th>구독서비스</th>
|
||||
<td colspan="3">
|
||||
<div class="td-inner">
|
||||
<div class="select-box">
|
||||
<select title="구독서비스" id="srchSelSubsvcNm" name="srchSelSubsvcNm">
|
||||
<option value="" <c:if test="${ resultMap.paramVO.srchSelSubsvcNm eq ''}">selected="selected"</c:if>>전체</option>
|
||||
<c:forEach items="${resultMap.srchSubsvcList}" var="srchSubsvc" varStatus="status">
|
||||
<option value="${srchSubsvc.subsvcNm}" <c:if test="${ resultMap.paramVO.srchSelSubsvcNm eq srchSubsvc.subsvcNm}">selected="selected"</c:if>>${srchSubsvc.subsvcNm}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<div class="select-box">
|
||||
<select title="구독서비스회차" id="srchSelSubsvcGnr" name="srchSelSubsvcGnr">
|
||||
<option value="" <c:if test="${ resultMap.paramVO.srchSelSubsvcGnr eq ''}">selected="selected"</c:if>>전체</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>구독서비스명</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text xl" type="text" title="구독서비스명" id="srchSubsvcNm" name="srchSubsvcNm" value="<c:out value="${ resultMap.paramVO.srchSubsvcNm }" />">
|
||||
</div>
|
||||
</td>
|
||||
<th>기수명</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text xl" type="text" title="구독서비스명" id="srchSubsvcGnrNm" name="srchSubsvcGnrNm" value="<c:out value="${ resultMap.paramVO.srchSubsvcGnrNm }" />">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>당월 처리자</th>
|
||||
<td colspan="3">
|
||||
<div class="td-inner">
|
||||
<div class="b-checkbox-container">
|
||||
<label class="b-checkbox checkbox">
|
||||
<input type="checkbox" id="srchCurMonExclude" name="srchCurMonExclude" value="Y" <c:if test="${resultMap.paramVO.srchCurMonExclude eq 'Y'}">checked</c:if>>
|
||||
<span class="check"></span>
|
||||
<span class="control-label">당월 처리자 제외</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="form-control-container">
|
||||
<div class="left"></div>
|
||||
<div class="center">
|
||||
<button class="btn outline" id="resetBtn" type="button">초기화</button>
|
||||
<button class="btn primary" id="searchBtn" type="button" onclick="fn_select_list(1);"><spring:message code="button.search"/> </button>
|
||||
</div>
|
||||
<div class="right">
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="" >
|
||||
<div class="table-wrapper">
|
||||
<table class="table">
|
||||
<colgroup>
|
||||
<col style="width: 12%;">
|
||||
<col>
|
||||
</colgroup>
|
||||
<tr>
|
||||
<th>출고상품<span class="red-7">*</span>
|
||||
<a type="button" onclick="fn_open_modal('#modalDiv','#product-search','/mngr/goods/goodsmngr/selectGoodsSrchPopupForm',{'goodsKndCd':'01'}); return false;" class="btn xsm primary mt-5">검색</a>
|
||||
</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div id="parentGoodsContainer" class="product-group">
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
<div id="pageDiv">
|
||||
</div>
|
||||
</form>
|
||||
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="modalDiv">asfasdfasdaf</div>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,140 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui" %>
|
||||
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld" %>
|
||||
|
||||
<%--
|
||||
Class Name : SubsvcOrdrMappedList.jsp
|
||||
Description : 구독서비스 상품변경 목록
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2026-02-09 jazz 최초 생성
|
||||
--%>
|
||||
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.cdnurl')" var="cdnurl"/>
|
||||
<section class="content-section">
|
||||
<div class="form-control-container">
|
||||
<div class="left">
|
||||
<div class="search-number">
|
||||
<span class="search-number__text">총 <strong><c:out value="${ resultMap.paginationInfo.totalRecordCount }"/></strong>건</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="center">
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="select-box">
|
||||
<select title="정렬순서" name="sortDvView" id="sortDvView" onchange="fn_select_list(1);return false;">
|
||||
<option value="subsvcGnrAsc" <c:if test="${resultMap.paramVO.sortDv eq 'subsvcGnrAsc'}">selected="selected"</c:if>>구독서비스+기수 오름차순</option>
|
||||
<option value="subsvcGnrDesc" <c:if test="${resultMap.paramVO.sortDv eq 'subsvcGnrDesc'}">selected="selected"</c:if>>구독서비스+기수 내림차순</option>
|
||||
<option value="mbrAsc" <c:if test="${resultMap.paramVO.sortDv eq 'mbrAsc'}">selected="selected"</c:if>>주문자 오름차순</option>
|
||||
<option value="mbrDesc" <c:if test="${resultMap.paramVO.sortDv eq 'mbrDesc'}">selected="selected"</c:if>>주문자 내림차순</option>
|
||||
<option value="ordrAsc" <c:if test="${resultMap.paramVO.sortDv eq 'ordrAsc'}">selected="selected"</c:if>>주문번호 오름차순</option>
|
||||
<option value="ordrDesc" <c:if test="${resultMap.paramVO.sortDv eq 'ordrDesc'}">selected="selected"</c:if>>주문번호 내림차순</option>
|
||||
<option value="lastPrcsDtAsc" <c:if test="${resultMap.paramVO.sortDv eq 'lastPrcsDtAsc'}">selected="selected"</c:if>>처리일 오름차순</option>
|
||||
<option value="lastPrcsDtDesc" <c:if test="${resultMap.paramVO.sortDv eq 'lastPrcsDtDesc'}">selected="selected"</c:if>>처리일 내림차순</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="select-box">
|
||||
<select id="pageUnitView" name="pageUnitView" title="페이지당 출력될 목록건수" onchange="fn_select_list(1,this.value);return false;">
|
||||
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
|
||||
<option value="<c:out value="${ pageUnit }"/>"
|
||||
<c:if test="${ resultMap.paginationInfo.recordCountPerPage eq pageUnit}">selected="selected"</c:if>>
|
||||
<c:out value="${ pageUnit }"/>개씩
|
||||
</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="horizontal-line">
|
||||
<div class="form-control-container">
|
||||
<div class="left">
|
||||
<button class="btn sm dark" onclick="fn_allOrdrReady_check();return false;">상품준비 일괄처리</button>
|
||||
</div>
|
||||
<div class="center">
|
||||
</div>
|
||||
</div>
|
||||
<hr class="spacing">
|
||||
<div class="table-wrapper">
|
||||
<table class="table vertical">
|
||||
<caption>구독서비스 목록</caption>
|
||||
<colgroup>
|
||||
<col style="width: 4%;">
|
||||
<col style="width: 15%;">
|
||||
<col style="width: 4%;">
|
||||
<col style="width: 7%;">
|
||||
<col style="width: 10%;">
|
||||
<col style="width: 10%;">
|
||||
<col style="width: 5%;">
|
||||
<col style="width: 5%;">
|
||||
<col style="width: 25%;">
|
||||
<col style="width: 10%;">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
<label class="b-checkbox checkbox is-medium ">
|
||||
<input type="checkbox" id="checkAll" value="">
|
||||
<span class="check"></span>
|
||||
</label>
|
||||
</th>
|
||||
<th>구독서비스</th>
|
||||
<th>기수</th>
|
||||
<th>기수명</th>
|
||||
<th>주문자</th>
|
||||
<th>주문번호</th>
|
||||
<th>차수</th>
|
||||
<th colspan="2">상품</th>
|
||||
<th>처리일</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<c:choose>
|
||||
<c:when test="${ not empty resultMap.list }">
|
||||
<c:forEach items="${ resultMap.list }" var="subsvcOrdrMapped" varStatus="status">
|
||||
<tr<c:if test="${lastProcsOdr > mbrLastProcsOdr}"> class="sendOut-info__reseller"</c:if>>
|
||||
<td>
|
||||
<label class="b-checkbox checkbox is-medium check-all">
|
||||
<input type="checkbox" name="arrCheck" class="arrCheck" value="${subsvcOrdrMapped.ordrInnb}@${subsvcOrdrMapped.ordrGoodsInnb}@${subsvcOrdrMapped.ordrGoodsOptnInnb}@${subsvcOrdrMapped.ordrDlvyInnb}">
|
||||
<span class="check"></span>
|
||||
</label>
|
||||
</td>
|
||||
<td><c:out value="${subsvcOrdrMapped.subsvcNm}"/></td>
|
||||
<td><c:out value="${subsvcOrdrMapped.subsvcGnr}"/>기</td>
|
||||
<td><c:out value="${subsvcOrdrMapped.subsvcGnrNm}"/></td>
|
||||
<td><c:out value="${subsvcOrdrMapped.mbrNm}"/></br>(<c:out value="${subsvcOrdrMapped.mbrId}"/>/<c:out value="${subsvcOrdrMapped.grade}"/>)</td>
|
||||
<td><c:out value="${subsvcOrdrMapped.ordrInnb}"/></td>
|
||||
<td><c:out value="${subsvcOrdrMapped.curtProcsOdr}"/>회</td>
|
||||
<td><img src='<c:out value="${cdnurl}${subsvcOrdrMapped.goodsImgCours}"/>' onerror="this.src='/pc/images/image_placeholder.png'" alt='<c:out value="${subsvcOrdrMapped.goodsNm}"/>' width="56px" height="56px"></td>
|
||||
<td>
|
||||
<div class="order-section__product-info">
|
||||
<span class="order-section__product-productTitle"><c:out value="${subsvcOrdrMapped.goodsNm}"/></span>
|
||||
<span class="option-text">
|
||||
<span class="option-badge">옵션</span> <c:out value="${subsvcOrdrMapped.optnNm1}"/>:<c:out value="${subsvcOrdrMapped.optnVal1}"/>
|
||||
</span>
|
||||
</div>
|
||||
</td>
|
||||
<fmt:parseDate value="${subsvcOrdrMapped.updtDt}" pattern="yyyy-MM-dd HH:mm:ss" var="parseUpdtDt"/>
|
||||
<fmt:formatDate value="${parseUpdtDt }" var="formatUpdtDt" pattern="yyyy-MM-dd"/>
|
||||
<td><c:out value="${ formatUpdtDt }"/></td>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<tr>
|
||||
<td colspan="100%"><spring:message code="common.nodata"/></td>
|
||||
</tr>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="pagination__container">
|
||||
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_list"/>
|
||||
</div>
|
||||
@@ -0,0 +1,504 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui" %>
|
||||
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld" %>
|
||||
|
||||
<%--
|
||||
Class Name : SubsvcOrdrMappedListFrom.jsp
|
||||
Description : 구독서비스 상품변경 목록 조회 폼
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2026-02-09 jazz 최초 생성
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>일반 관리자</title>
|
||||
<%@ include file="/WEB-INF/views/comm/mngr/Include.jsp"%>
|
||||
<spring:eval expression="@environment.getProperty('currency-unit.default')" var="curUnit"/>
|
||||
</head>
|
||||
<script>
|
||||
var initFlag = true;
|
||||
$(document).ready(function () {
|
||||
let pageIndex = $("#pageIndex").val();
|
||||
let pageUnit = $("#pageUnit").val();
|
||||
let srchSelSubsvcNm = $('#srchSelSubsvcNm').val();
|
||||
// event 제어
|
||||
fn_event();
|
||||
|
||||
if(srchSelSubsvcNm != ''){
|
||||
fn_getsubsvcGnr(srchSelSubsvcNm);
|
||||
}else{
|
||||
// 목록 조회
|
||||
fn_select_list(pageIndex, pageUnit);
|
||||
}
|
||||
|
||||
// 엔터키 검색
|
||||
$('#listForm').on('keydown', function (event) {
|
||||
if (event.keyCode === 13) {
|
||||
event.preventDefault();
|
||||
fn_select_list(1);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/*********************************************************
|
||||
* 목록 조회
|
||||
******************************************************** */
|
||||
const fn_select_list = function (pageIndex, pageUnit) {
|
||||
let dataStr;
|
||||
|
||||
if (!pageIndex) {
|
||||
$('#pageIndex').val(1);
|
||||
} else {
|
||||
$('#pageIndex').val(pageIndex);
|
||||
}
|
||||
//정렬기준 셋팅
|
||||
if(typeof $('#sortDvView') !== undefined && $('#sortDvView').val() !== undefined){
|
||||
$('#sortDv').val($('#sortDvView').val());
|
||||
}
|
||||
//한페이지 목록개수 셋팅
|
||||
if(typeof $('#pageUnitView') !== undefined && $('#pageUnitView').val() !== undefined){
|
||||
$('#pageUnit').val($('#pageUnitView').val());
|
||||
}
|
||||
|
||||
if (!pageUnit) {
|
||||
dataStr = $('#listForm').serialize();
|
||||
} else {
|
||||
if ($('#pageUnit').length) {
|
||||
$('#pageUnit').val(pageUnit);
|
||||
dataStr = $('#listForm').serialize();
|
||||
} else {
|
||||
dataStr = $('#listForm').serialize() + '&pageUnit=' + pageUnit;
|
||||
}
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
type: "post",
|
||||
url: "<c:url value="/mngr/ordr/subsvc/selectSubsvcOrdrMappedList"/>",
|
||||
data: dataStr,
|
||||
success: function (resultHtml) {
|
||||
$('#pageDiv').html(resultHtml);
|
||||
$('#sortDv').val($('#sortDvView').val());
|
||||
$('#pageUnitView').niceSelect();
|
||||
$('#sortDvView').niceSelect();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/* 현제uri에 프로토콜, 호스트, 쿼리스티링을 제외하여 history갱신 */
|
||||
history.replaceState({}, null, location.pathname);
|
||||
|
||||
/* ****************************
|
||||
* event 제어
|
||||
******************************/
|
||||
const fn_event = function () {
|
||||
/* 검색조건 구독서비스 선택 시 회차 조회 이벤트*/
|
||||
$(document).on('change', '#srchSelSubsvcNm', function(){
|
||||
var srchSelSubsvcNm = $(this).val();
|
||||
if(fn_is_empty(srchSelSubsvcNm)){
|
||||
// 회차 초기화
|
||||
$('#srchSelSubsvcGnr').empty().append('<option value="">전체</option>').niceSelect('update');
|
||||
}else{
|
||||
//해당구독서비스 기수조회
|
||||
fn_getsubsvcGnr(srchSelSubsvcNm);
|
||||
}
|
||||
});
|
||||
|
||||
/* 목록 > 전체선택 체인지 이벤트 */
|
||||
$(document).on('change', '#checkAll', function () {
|
||||
let checkbox = $(this).closest('table').find('input[name="arrCheck"]');
|
||||
|
||||
$(checkbox).prop('checked', false);
|
||||
$(checkbox).prop('checked', $(this).is(':checked'));
|
||||
});
|
||||
}
|
||||
|
||||
/* ****************************
|
||||
* 해당구독서비스 기수조회 AJAX
|
||||
******************************/
|
||||
const fn_getsubsvcGnr = function (srchSelSubsvcNm) {
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: '<c:url value="/mngr/goods/subsvc/selectSrchSubsvcGnrListAjax"/>',
|
||||
data: {
|
||||
'srchSelSubsvcNm': srchSelSubsvcNm
|
||||
},
|
||||
success: function (data) {
|
||||
if (data.resBody != null) {
|
||||
const result = JSON.parse(data.resBody.result);
|
||||
const srchSubsvcGnrList = result.srchSubsvcGnrList;
|
||||
if (srchSubsvcGnrList.length > 0) {
|
||||
// 회차 초기화
|
||||
$('#srchSelSubsvcGnr').empty().append('<option value="">전체</option>').niceSelect('update');
|
||||
// $('#srchSubsvcGnr option').filter(function() {
|
||||
// return $(this).val() !== '';
|
||||
// }).remove();
|
||||
|
||||
for (let i = 0; i < srchSubsvcGnrList.length; i++) {
|
||||
const srchSubsvcGnr = srchSubsvcGnrList[i];
|
||||
var check = "";
|
||||
if(srchSubsvcGnr.subsvcGnr == '${resultMap.paramVO.srchSelSubsvcGnr}'){
|
||||
check ="selected"
|
||||
}
|
||||
|
||||
if(initFlag == true){
|
||||
$('#srchSelSubsvcGnr').append('<option value="' + srchSubsvcGnr.subsvcGnr + '" '+ check+'>' + srchSubsvcGnr.subsvcGnrNm + '</option>');
|
||||
fn_select_list();
|
||||
initFlag = false;
|
||||
}else{
|
||||
$('#srchSelSubsvcGnr').append('<option value="' + srchSubsvcGnr.subsvcGnr + '">' + srchSubsvcGnr.subsvcGnrNm + '</option>');
|
||||
|
||||
}
|
||||
}
|
||||
$('#srchSelSubsvcGnr').niceSelect('update');
|
||||
}
|
||||
}
|
||||
},
|
||||
error: function (data) {
|
||||
fn_proc_error_message(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 체크박스 전체 처리
|
||||
* */
|
||||
const fn_change_event = function (_target, _arg) {
|
||||
if (_arg === 'all') {
|
||||
|
||||
if ($('#' + _target + '-all').is(':checked')) {
|
||||
$('[name=' + _target + ']').prop('checked', true);
|
||||
} else {
|
||||
$('[name=' + _target + ']').prop('checked', false);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
let chkCnt = $('[name=' + _target + ']:checked').length;
|
||||
let allCnt = $('[name=' + _target + ']').length;
|
||||
if (chkCnt !== allCnt && $('#' + _target + '-all').is(':checked')) {
|
||||
$('#' + _target + '-all').prop('checked', false);
|
||||
} else if (chkCnt === allCnt) {
|
||||
$('#' + _target + '-all').prop('checked', true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************
|
||||
* 선택된 대상자 구독서비스 상품준비 일괄처리 AJAX
|
||||
*********************************************************/
|
||||
const fn_allOrdrReady_check = function () {
|
||||
|
||||
let url = '<c:url value="/mngr/ordr/subsvc/updateSubsvcOrdrReady"/>';
|
||||
let check = $("input[name='arrCheck']:checked");
|
||||
let param = $('#listForm').serialize();
|
||||
|
||||
if (check.length === 0) {
|
||||
alert("선택된 대상이 없습니다");
|
||||
return false;
|
||||
}
|
||||
|
||||
/** 출고상품 선택 확인*/
|
||||
if($('#goodsInnb').val() == undefined){
|
||||
alert("출고상품 선택이 필요합니다");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (confirm('선택된 주문을 상품준비 일괄처리 하시겠습니까?')) {
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: url,
|
||||
data: param,
|
||||
dataType: "json",
|
||||
success: function (data) {
|
||||
const message = JSON.parse(data.resBody.result).message;
|
||||
if(message == "success"){
|
||||
alert('<spring:message code="success.common.process"/>');
|
||||
fn_select_list();
|
||||
}else{
|
||||
alert('<spring:message code="fail.common.save"/>');
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* 관리자 주문 > 상품조회 > 검색조건 > 날짜 선택 이벤트 */
|
||||
$(document).on('click', '.dateRange-btn', function () {
|
||||
const date = $(this).attr('id');
|
||||
|
||||
$('.dateRange-btn').removeClass('selected');
|
||||
$('#' + date).addClass('selected');
|
||||
|
||||
const datepicker = $(this).closest('.td-inner').find('.datepicker');
|
||||
const start = $(datepicker[0]).attr('id');
|
||||
const end = $(datepicker[1]).attr('id');
|
||||
|
||||
if ('allDays' === date) {
|
||||
$('#' + start + ', #' + end).val('');
|
||||
|
||||
$('#datePeriod').val(date);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
fn_set_date(start, end, end, date);
|
||||
|
||||
$('#datePeriod').val(date);
|
||||
});
|
||||
|
||||
//카테고리 선택시 카테고리 아이디 저장(검색용)
|
||||
$(document).on('change', 'select[id^=ctgryDepth]', function () {
|
||||
const ctgryOptn = $(this).val()
|
||||
|
||||
if(!fn_is_empty(ctgryOptn)){
|
||||
$('#ctgryId').val(ctgryOptn)
|
||||
}else{
|
||||
//value가 ''인 카테고리 선택할경우
|
||||
let currentCtgryDepth = parseInt($(this).attr('id').replace('ctgryDepth', ''));
|
||||
|
||||
//1차 카테고리가 아닐 경우 이전 카테고리 번호 가져오기
|
||||
if(currentCtgryDepth !== 1){
|
||||
$('#ctgryId').val($('#ctgryDepth' + (currentCtgryDepth - 1)).val())
|
||||
}else{
|
||||
//1차 카테고리 일경우 카테고리 번호 비우기
|
||||
$('#ctgryId').val('')
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
//초기화버튼
|
||||
$(document).on('click', '#resetBtn', function () {
|
||||
$('#listForm')[0].reset();
|
||||
$('#srchSelSubsvcNm').niceSelect('update');
|
||||
$('#srchSelSubsvcNm').trigger("change");
|
||||
$('#srchSelSubsvcGnr').niceSelect('update');
|
||||
|
||||
fn_select_list(1);
|
||||
})
|
||||
|
||||
let selected = [];
|
||||
|
||||
/*********************************************************
|
||||
* 상품 검색 팝업 > 상품 목록 조회
|
||||
* param : pageIndex, selected
|
||||
******************************************************** */
|
||||
const fn_goods_search_popup_list = function (pageIndex, selected) {
|
||||
let dataStr;
|
||||
if (!pageIndex) {
|
||||
$('#pageIndex').val(1);
|
||||
} else {
|
||||
$('#pageIndex').val(pageIndex);
|
||||
}
|
||||
|
||||
$('#popupListForm').find('input[name=pageIndex]').eq(0).val(pageIndex);
|
||||
const popupListForm = $("#popupListForm").serialize();
|
||||
|
||||
$.ajax({
|
||||
type: "post",
|
||||
url: "<c:url value="/mngr/goods/goodsmngr/selectGoodsSrchPopupList"/>",
|
||||
data: popupListForm,
|
||||
success: function (resultHtml) {
|
||||
$('#goodsList').empty();
|
||||
$('#goodsList').html(resultHtml);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/*********************************************************
|
||||
* 상품검색 팝업에서 선택된 상품을 출고상품에 셋팅
|
||||
* param 없음
|
||||
******************************************************** */
|
||||
function fn_select_goods_search() {
|
||||
let selected = [];
|
||||
$('#appendList tr').each(function () {
|
||||
const goodsId = $(this).attr('id').replace('choiseListId', '');
|
||||
const goodsOptnInnb = $(this).find('input[name="goodsOptnInnb"]').val();
|
||||
const optnTy = $(this).find('input[name="optnTy"]').val();
|
||||
const goodsImg = $(this).find('input[name="goodsImgCours"]').val();
|
||||
const goodsNm = $(this).find('input[name="goodsNm"]').val();
|
||||
const goodsPrice = $(this).find('input[name="slepric"]').val();
|
||||
const goodsSttusNm = $(this).find('input[name="goodsSttusNm"]').val();
|
||||
const expsrNm = $(this).find('input[name="expsrNm"]').val();
|
||||
|
||||
selected.push({
|
||||
goodsId: goodsId,
|
||||
goodsOptnInnb: goodsOptnInnb,
|
||||
optnTy: optnTy,
|
||||
goodsImg: goodsImg,
|
||||
goodsNm: goodsNm,
|
||||
goodsPrice: goodsPrice,
|
||||
goodsSttusNm: goodsSttusNm,
|
||||
expsrNm: expsrNm
|
||||
});
|
||||
});
|
||||
|
||||
// 각 화면에 맞춰서 HTML 변경 START
|
||||
var tableBody = $("#parentGoodsContainer");
|
||||
tableBody.empty();
|
||||
|
||||
selected.forEach((good, index) => {
|
||||
if(index == 0) {
|
||||
var productHtml = `
|
||||
<div class="product-group__item">
|
||||
<input type="hidden" id="goodsInnb" name="goodsInnb" value="` + good.goodsId + `">
|
||||
<input type="hidden" id="goodsOptnInnb" name="goodsOptnInnb" value="` + good.goodsOptnInnb + `">
|
||||
<input type="hidden" id="optnTy" name="optnTy" value="` + good.optnTy + `">
|
||||
<span class="product-group__item-number">` + (index + 1) + `</span>
|
||||
<div class="product-group__image">
|
||||
<img src="` + good.goodsImg + `" width="140" alt="` + good.goodsNm + `"
|
||||
onerror="this.src='/mngr/images/image_placeholder.png'"
|
||||
>
|
||||
</div>
|
||||
<div class="product-group__description">
|
||||
<p>` + good.goodsNm + `</p>
|
||||
<p class="product-group__description-price">` + fn_format_comma(good.goodsPrice) + `${curUnit}</p>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
tableBody.append(productHtml);
|
||||
});
|
||||
// 각 화면에 맞춰서 HTML 변경 END
|
||||
|
||||
fn_close_modal('product-search');
|
||||
}
|
||||
|
||||
</script>
|
||||
<body>
|
||||
<%@ include file="/WEB-INF/views/comm/mngr/Header.jsp"%>
|
||||
<main class="main">
|
||||
<%@ include file="/WEB-INF/views/comm/mngr/Left.jsp"%>
|
||||
<div class="content">
|
||||
<div class="content__inner">
|
||||
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
|
||||
<div class="page-title">
|
||||
<h2 class="page-title__title">구독서비스 상품변경 관리</h2>
|
||||
<div class="page-title__btn-container">
|
||||
</div>
|
||||
</div>
|
||||
<form id='listForm' name="listForm" method="post" action="<c:url value="/mngr/ordr/subsvc/selectSubsvcOrdrMappedList"/>">
|
||||
<input type="hidden" id="pageIndex" name="pageIndex" value="${ resultMap.paramVO.pageIndex }"/>
|
||||
<input type="hidden" id="sortDv" name="sortDv" value="${ resultMap.paramVO.sortDv }">
|
||||
<input type="hidden" id="pageUnit" name="pageUnit" value="${ resultMap.paramVO.pageUnit }">
|
||||
<input type="hidden" id="subsvcInnb" name="subsvcInnb" value="">
|
||||
<section class="content-section" id="search-section">
|
||||
<div class="table-wrapper">
|
||||
<table class="table">
|
||||
<colgroup>
|
||||
<col style="width: 12%;">
|
||||
<col>
|
||||
<col style="width: 12%;">
|
||||
<col>
|
||||
</colgroup>
|
||||
<tr>
|
||||
<th>구독서비스</th>
|
||||
<td colspan="3">
|
||||
<div class="td-inner">
|
||||
<div class="select-box">
|
||||
<select title="구독서비스" id="srchSelSubsvcNm" name="srchSelSubsvcNm">
|
||||
<option value="" <c:if test="${ resultMap.paramVO.srchSelSubsvcNm eq ''}">selected="selected"</c:if>>전체</option>
|
||||
<c:forEach items="${resultMap.srchSubsvcList}" var="srchSubsvc" varStatus="status">
|
||||
<option value="${srchSubsvc.subsvcNm}" <c:if test="${ resultMap.paramVO.srchSelSubsvcNm eq srchSubsvc.subsvcNm}">selected="selected"</c:if>>${srchSubsvc.subsvcNm}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<div class="select-box">
|
||||
<select title="구독서비스회차" id="srchSelSubsvcGnr" name="srchSelSubsvcGnr">
|
||||
<option value="" <c:if test="${ resultMap.paramVO.srchSelSubsvcGnr eq ''}">selected="selected"</c:if>>전체</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>구독서비스명</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text xl" type="text" title="구독서비스명" id="srchSubsvcNm" name="srchSubsvcNm" value="<c:out value="${ resultMap.paramVO.srchSubsvcNm }" />">
|
||||
</div>
|
||||
</td>
|
||||
<th>기수명</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text xl" type="text" title="구독서비스명" id="srchSubsvcGnrNm" name="srchSubsvcGnrNm" value="<c:out value="${ resultMap.paramVO.srchSubsvcGnrNm }" />">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>주문자명</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text xl" type="text" title="주문자명" id="srchMbrNm" name="srchMbrNm" value="<c:out value="${ resultMap.paramVO.srchMbrNm }" />">
|
||||
</div>
|
||||
</td>
|
||||
<th>주문자ID</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text xl" type="text" title="주문자ID" id="srchMbrId" name="srchMbrId" value="<c:out value="${ resultMap.paramVO.srchMbrId }" />">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>주문번호</th>
|
||||
<td colspan="3">
|
||||
<div class="td-inner">
|
||||
<input class="input-text xl" type="text" title="주문번호" id="srchOrdrInnb" name="srchOrdrInnb" value="<c:out value="${ resultMap.paramVO.srchOrdrInnb }" />">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="form-control-container">
|
||||
<div class="left"></div>
|
||||
<div class="center">
|
||||
<button class="btn outline" id="resetBtn" type="button">초기화</button>
|
||||
<button class="btn primary" id="searchBtn" type="button" onclick="fn_select_list(1);"><spring:message code="button.search"/> </button>
|
||||
</div>
|
||||
<div class="right">
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="" >
|
||||
<div class="table-wrapper">
|
||||
<table class="table">
|
||||
<colgroup>
|
||||
<col style="width: 12%;">
|
||||
<col>
|
||||
</colgroup>
|
||||
<tr>
|
||||
<th>출고상품<span class="red-7">*</span>
|
||||
<a type="button" onclick="fn_open_modal('#modalDiv','#product-search','/mngr/goods/goodsmngr/selectGoodsSrchPopupForm',{'goodsKndCd':'01'}); return false;" class="btn xsm primary mt-5">검색</a>
|
||||
</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div id="parentGoodsContainer" class="product-group">
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
<div id="pageDiv">
|
||||
</div>
|
||||
</form>
|
||||
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="modalDiv">asfasdfasdaf</div>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,124 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui" %>
|
||||
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld" %>
|
||||
|
||||
<%--
|
||||
Class Name : SubsvcOrdrMbrList.jsp
|
||||
Description : 구독서비스 구독자 조회 목록
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2026-02-09 jazz 최초 생성
|
||||
--%>
|
||||
<section class="content-section">
|
||||
<div class="form-control-container">
|
||||
<div class="left">
|
||||
<div class="search-number">
|
||||
<span class="search-number__text">총 <strong><c:out value="${ resultMap.paginationInfo.totalRecordCount }"/></strong>건</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="center">
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="select-box">
|
||||
<select title="정렬순서" name="sortDvView" id="sortDvView" onchange="fn_select_list(1);return false;">
|
||||
<option value="subsvcGnrAsc" <c:if test="${resultMap.paramVO.sortDv eq 'subsvcGnrAsc'}">selected="selected"</c:if>>구독서비스+기수 오름차순</option>
|
||||
<option value="subsvcGnrDesc" <c:if test="${resultMap.paramVO.sortDv eq 'subsvcGnrDesc'}">selected="selected"</c:if>>구독서비스+기수 내림차순</option>
|
||||
<option value="subscriberAsc" <c:if test="${resultMap.paramVO.sortDv eq 'subscriberAsc'}">selected="selected"</c:if>>구독자수 오름차순</option>
|
||||
<option value="subscriberDesc" <c:if test="${resultMap.paramVO.sortDv eq 'subscriberDesc'}">selected="selected"</c:if>>구독자수 내림차순</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="select-box">
|
||||
<select id="pageUnitView" name="pageUnitView" title="페이지당 출력될 목록건수" onchange="fn_select_list(1,this.value);return false;">
|
||||
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
|
||||
<option value="<c:out value="${ pageUnit }"/>"
|
||||
<c:if test="${ resultMap.paginationInfo.recordCountPerPage eq pageUnit}">selected="selected"</c:if>>
|
||||
<c:out value="${ pageUnit }"/>개씩
|
||||
</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="horizontal-line">
|
||||
<div class="table-wrapper">
|
||||
<table class="table vertical">
|
||||
<caption>구독서비스 목록</caption>
|
||||
<colgroup>
|
||||
<col style="width: 5%;">
|
||||
<col style="width: 5%;">
|
||||
<col style="width: 20%;">
|
||||
<col style="width: 5%;">
|
||||
<col style="width: 10%;">
|
||||
<col style="width: 10%;">
|
||||
<col style="width: 5%;">
|
||||
<col style="width: 5%;">
|
||||
<col style="width: 10%;">
|
||||
<col style="width: 15%;">
|
||||
<col style="width: 10%;">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
<label class="b-checkbox checkbox is-medium ">
|
||||
<input type="checkbox" id="checkAll" value="">
|
||||
<span class="check"></span>
|
||||
</label>
|
||||
</th>
|
||||
<th>번호</th>
|
||||
<th>구독서비스</th>
|
||||
<th>기수</th>
|
||||
<th>기수명</th>
|
||||
<th>실판매가</th>
|
||||
<th>배송횟수</th>
|
||||
<th>최종차수</th>
|
||||
<th>최종처리일</th>
|
||||
<th>구독자수</th>
|
||||
<th>배송상품</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<c:choose>
|
||||
<c:when test="${ not empty resultMap.list }">
|
||||
<c:forEach items="${ resultMap.list }" var="subsvcOrdrMbr" varStatus="status">
|
||||
<tr>
|
||||
<td>
|
||||
<label class="b-checkbox checkbox is-medium check-all">
|
||||
<input type="checkbox" name="arrCheck" class="arrCheck" value="">
|
||||
<span class="check"></span>
|
||||
</label>
|
||||
</td>
|
||||
<td><c:out value="${subsvcOrdrMbr.totCnt - (subsvcOrdrMbr.rnum -1)}"/></td>
|
||||
<td><c:out value="${subsvcOrdrMbr.subsvcNm}"/></td>
|
||||
<td><c:out value="${subsvcOrdrMbr.subsvcGnr}"/>기</td>
|
||||
<td><c:out value="${subsvcOrdrMbr.subsvcGnrNm}"/></td>
|
||||
<td><fmt:formatNumber value="${subsvcOrdrMbr.selpric}" pattern="#,###"/></td>
|
||||
<td><c:out value="${subsvcOrdrMbr.dlvyCnt}"/>회</td>
|
||||
<td><c:out value="${subsvcOrdrMbr.lastProcsOdr}"/>회</td>
|
||||
<fmt:parseDate value="${subsvcOrdrMbr.lastPrcsDt}" pattern="yyyy-MM-dd HH:mm:ss" var="parseLastPrcsDt"/>
|
||||
<fmt:formatDate value="${parseLastPrcsDt }" var="formatLastPrcsDt" pattern="yyyy-MM-dd"/>
|
||||
<td><c:out value="${ formatLastPrcsDt }"/></td>
|
||||
<td><c:out value="${subsvcOrdrMbr.subscriberCnt}"/>명 <button class="btn xsm outline light-gray" type="button" onclick="fn_open_modal('#modalDiv','#subsvcOrderMbrInfoListPop','<c:url value ='/mngr/ordr/subsvc/selectSubsvcOrderMbrInfoListPop'/>',{'subsvcInnb':'<c:out value="${subsvcOrdrMbr.subsvcInnb}"/>'}); return false;">상세</button></td>
|
||||
<td><button class="btn xsm outline light-gray" type="button" onclick="fn_open_modal('#modalDiv','#subsvcOrdrrGoodsInfoListPop','<c:url value ='/mngr/ordr/subsvc/selectSubsvcOrderGoodsInfoListPop'/>',{'subsvcInnb':'<c:out value="${subsvcOrdrMbr.subsvcInnb}"/>'}); return false;">보기</button></td>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<tr>
|
||||
<td colspan="100%"><spring:message code="common.nodata"/></td>
|
||||
</tr>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="pagination__container">
|
||||
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_list"/>
|
||||
</div>
|
||||
@@ -0,0 +1,347 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui" %>
|
||||
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld" %>
|
||||
|
||||
<%--
|
||||
Class Name : SubsvcOrdrMbrListFrom.jsp
|
||||
Description : 구독서비스 구독자 조회 폼
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2026-02-09 jazz 최초 생성
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>일반 관리자</title>
|
||||
<%@ include file="/WEB-INF/views/comm/mngr/Include.jsp"%>
|
||||
<spring:eval expression="@environment.getProperty('currency-unit.default')" var="curUnit"/>
|
||||
</head>
|
||||
<script>
|
||||
var initFlag = true;
|
||||
$(document).ready(function () {
|
||||
let pageIndex = $("#pageIndex").val();
|
||||
let pageUnit = $("#pageUnit").val();
|
||||
let srchSelSubsvcNm = $('#srchSelSubsvcNm').val();
|
||||
// event 제어
|
||||
fn_event();
|
||||
|
||||
if(srchSelSubsvcNm != ''){
|
||||
fn_getsubsvcGnr(srchSelSubsvcNm);
|
||||
}else{
|
||||
// 목록 조회
|
||||
fn_select_list(pageIndex, pageUnit);
|
||||
}
|
||||
|
||||
// 엔터키 검색
|
||||
$('#listForm').on('keydown', function (event) {
|
||||
if (event.keyCode === 13) {
|
||||
event.preventDefault();
|
||||
fn_select_list(1);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/*********************************************************
|
||||
* 목록 조회
|
||||
******************************************************** */
|
||||
const fn_select_list = function (pageIndex, pageUnit) {
|
||||
let dataStr;
|
||||
|
||||
if (!pageIndex) {
|
||||
$('#pageIndex').val(1);
|
||||
} else {
|
||||
$('#pageIndex').val(pageIndex);
|
||||
}
|
||||
//정렬기준 셋팅
|
||||
if(typeof $('#sortDvView') !== undefined && $('#sortDvView').val() !== undefined){
|
||||
$('#sortDv').val($('#sortDvView').val());
|
||||
}
|
||||
//한페이지 목록개수 셋팅
|
||||
if(typeof $('#pageUnitView') !== undefined && $('#pageUnitView').val() !== undefined){
|
||||
$('#pageUnit').val($('#pageUnitView').val());
|
||||
}
|
||||
|
||||
if (!pageUnit) {
|
||||
dataStr = $('#listForm').serialize();
|
||||
} else {
|
||||
if ($('#pageUnit').length) {
|
||||
$('#pageUnit').val(pageUnit);
|
||||
dataStr = $('#listForm').serialize();
|
||||
} else {
|
||||
dataStr = $('#listForm').serialize() + '&pageUnit=' + pageUnit;
|
||||
}
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
type: "post",
|
||||
url: "<c:url value="/mngr/ordr/subsvc/selectSubsvcOrdrMbrList"/>",
|
||||
data: dataStr,
|
||||
success: function (resultHtml) {
|
||||
$('#pageDiv').html(resultHtml);
|
||||
$('#sortDv').val($('#sortDvView').val());
|
||||
$('#pageUnitView').niceSelect();
|
||||
$('#sortDvView').niceSelect();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/* 현제uri에 프로토콜, 호스트, 쿼리스티링을 제외하여 history갱신 */
|
||||
history.replaceState({}, null, location.pathname);
|
||||
|
||||
/* ****************************
|
||||
* event 제어
|
||||
******************************/
|
||||
const fn_event = function () {
|
||||
/* 검색조건 구독서비스 선택 시 회차 조회 이벤트*/
|
||||
$(document).on('change', '#srchSelSubsvcNm', function(){
|
||||
var srchSelSubsvcNm = $(this).val();
|
||||
if(fn_is_empty(srchSelSubsvcNm)){
|
||||
// 회차 초기화
|
||||
$('#srchSelSubsvcGnr').empty().append('<option value="">전체</option>').niceSelect('update');
|
||||
}else{
|
||||
//해당구독서비스 기수조회
|
||||
fn_getsubsvcGnr(srchSelSubsvcNm);
|
||||
}
|
||||
});
|
||||
|
||||
/* 목록 > 전체선택 체인지 이벤트 */
|
||||
$(document).on('change', '#checkAll', function () {
|
||||
let checkbox = $(this).closest('table').find('input[name="arrCheck"]');
|
||||
|
||||
$(checkbox).prop('checked', false);
|
||||
$(checkbox).prop('checked', $(this).is(':checked'));
|
||||
});
|
||||
}
|
||||
|
||||
/* ****************************
|
||||
* 해당구독서비스 기수조회 AJAX
|
||||
******************************/
|
||||
const fn_getsubsvcGnr = function (srchSelSubsvcNm) {
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: '<c:url value="/mngr/goods/subsvc/selectSrchSubsvcGnrListAjax"/>',
|
||||
data: {
|
||||
'srchSelSubsvcNm': srchSelSubsvcNm
|
||||
},
|
||||
success: function (data) {
|
||||
if (data.resBody != null) {
|
||||
const result = JSON.parse(data.resBody.result);
|
||||
const srchSubsvcGnrList = result.srchSubsvcGnrList;
|
||||
if (srchSubsvcGnrList.length > 0) {
|
||||
// 회차 초기화
|
||||
$('#srchSelSubsvcGnr').empty().append('<option value="">전체</option>').niceSelect('update');
|
||||
// $('#srchSubsvcGnr option').filter(function() {
|
||||
// return $(this).val() !== '';
|
||||
// }).remove();
|
||||
|
||||
for (let i = 0; i < srchSubsvcGnrList.length; i++) {
|
||||
const srchSubsvcGnr = srchSubsvcGnrList[i];
|
||||
var check = "";
|
||||
if(srchSubsvcGnr.subsvcGnr == '${resultMap.paramVO.srchSelSubsvcGnr}'){
|
||||
check ="selected"
|
||||
}
|
||||
|
||||
if(initFlag == true){
|
||||
$('#srchSelSubsvcGnr').append('<option value="' + srchSubsvcGnr.subsvcGnr + '" '+ check+'>' + srchSubsvcGnr.subsvcGnrNm + '</option>');
|
||||
fn_select_list();
|
||||
initFlag = false;
|
||||
}else{
|
||||
$('#srchSelSubsvcGnr').append('<option value="' + srchSubsvcGnr.subsvcGnr + '">' + srchSubsvcGnr.subsvcGnrNm + '</option>');
|
||||
|
||||
}
|
||||
}
|
||||
$('#srchSelSubsvcGnr').niceSelect('update');
|
||||
}
|
||||
}
|
||||
},
|
||||
error: function (data) {
|
||||
fn_proc_error_message(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 체크박스 전체 처리
|
||||
* */
|
||||
const fn_change_event = function (_target, _arg) {
|
||||
if (_arg === 'all') {
|
||||
|
||||
if ($('#' + _target + '-all').is(':checked')) {
|
||||
$('[name=' + _target + ']').prop('checked', true);
|
||||
} else {
|
||||
$('[name=' + _target + ']').prop('checked', false);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
let chkCnt = $('[name=' + _target + ']:checked').length;
|
||||
let allCnt = $('[name=' + _target + ']').length;
|
||||
if (chkCnt !== allCnt && $('#' + _target + '-all').is(':checked')) {
|
||||
$('#' + _target + '-all').prop('checked', false);
|
||||
} else if (chkCnt === allCnt) {
|
||||
$('#' + _target + '-all').prop('checked', true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 관리자 주문 > 상품조회 > 검색조건 > 날짜 선택 이벤트 */
|
||||
$(document).on('click', '.dateRange-btn', function () {
|
||||
const date = $(this).attr('id');
|
||||
|
||||
$('.dateRange-btn').removeClass('selected');
|
||||
$('#' + date).addClass('selected');
|
||||
|
||||
const datepicker = $(this).closest('.td-inner').find('.datepicker');
|
||||
const start = $(datepicker[0]).attr('id');
|
||||
const end = $(datepicker[1]).attr('id');
|
||||
|
||||
if ('allDays' === date) {
|
||||
$('#' + start + ', #' + end).val('');
|
||||
|
||||
$('#datePeriod').val(date);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
fn_set_date(start, end, end, date);
|
||||
|
||||
$('#datePeriod').val(date);
|
||||
});
|
||||
|
||||
//카테고리 선택시 카테고리 아이디 저장(검색용)
|
||||
$(document).on('change', 'select[id^=ctgryDepth]', function () {
|
||||
const ctgryOptn = $(this).val()
|
||||
|
||||
if(!fn_is_empty(ctgryOptn)){
|
||||
$('#ctgryId').val(ctgryOptn)
|
||||
}else{
|
||||
//value가 ''인 카테고리 선택할경우
|
||||
let currentCtgryDepth = parseInt($(this).attr('id').replace('ctgryDepth', ''));
|
||||
|
||||
//1차 카테고리가 아닐 경우 이전 카테고리 번호 가져오기
|
||||
if(currentCtgryDepth !== 1){
|
||||
$('#ctgryId').val($('#ctgryDepth' + (currentCtgryDepth - 1)).val())
|
||||
}else{
|
||||
//1차 카테고리 일경우 카테고리 번호 비우기
|
||||
$('#ctgryId').val('')
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
//초기화버튼
|
||||
$(document).on('click', '#resetBtn', function () {
|
||||
$('#listForm')[0].reset();
|
||||
$('#srchSelSubsvcNm').niceSelect('update');
|
||||
$('#srchSelSubsvcNm').trigger("change");
|
||||
$('#srchSelSubsvcGnr').niceSelect('update');
|
||||
|
||||
fn_select_list(1);
|
||||
})
|
||||
</script>
|
||||
<body>
|
||||
<%@ include file="/WEB-INF/views/comm/mngr/Header.jsp"%>
|
||||
<main class="main">
|
||||
<%@ include file="/WEB-INF/views/comm/mngr/Left.jsp"%>
|
||||
<div class="content">
|
||||
<div class="content__inner">
|
||||
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
|
||||
<div class="page-title">
|
||||
<h2 class="page-title__title">구독서비스 구독자 조회</h2>
|
||||
<div class="page-title__btn-container">
|
||||
</div>
|
||||
</div>
|
||||
<form id='listForm' name="listForm" method="post" action="<c:url value="/mngr/ordr/subsvc/selectSubsvcOrdrMbrList"/>">
|
||||
<input type="hidden" id="pageIndex" name="pageIndex" value="${ resultMap.paramVO.pageIndex }"/>
|
||||
<input type="hidden" id="sortDv" name="sortDv" value="${ resultMap.paramVO.sortDv }">
|
||||
<input type="hidden" id="pageUnit" name="pageUnit" value="${ resultMap.paramVO.pageUnit }">
|
||||
<input type="hidden" id="subsvcInnb" name="subsvcInnb" value="">
|
||||
<section class="content-section" id="search-section">
|
||||
<div class="table-wrapper">
|
||||
<table class="table">
|
||||
<colgroup>
|
||||
<col style="width: 12%;">
|
||||
<col>
|
||||
<col style="width: 12%;">
|
||||
<col>
|
||||
</colgroup>
|
||||
<tr>
|
||||
<th>구독서비스</th>
|
||||
<td colspan="3">
|
||||
<div class="td-inner">
|
||||
<div class="select-box">
|
||||
<select title="구독서비스" id="srchSelSubsvcNm" name="srchSelSubsvcNm">
|
||||
<option value="" <c:if test="${ resultMap.paramVO.srchSelSubsvcNm eq ''}">selected="selected"</c:if>>전체</option>
|
||||
<c:forEach items="${resultMap.srchSubsvcList}" var="srchSubsvc" varStatus="status">
|
||||
<option value="${srchSubsvc.subsvcNm}" <c:if test="${ resultMap.paramVO.srchSelSubsvcNm eq srchSubsvc.subsvcNm}">selected="selected"</c:if>>${srchSubsvc.subsvcNm}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<div class="select-box">
|
||||
<select title="구독서비스회차" id="srchSelSubsvcGnr" name="srchSelSubsvcGnr">
|
||||
<option value="" <c:if test="${ resultMap.paramVO.srchSelSubsvcGnr eq ''}">selected="selected"</c:if>>전체</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>구독서비스명</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text xl" type="text" title="구독서비스명" id="srchSubsvcNm" name="srchSubsvcNm" value="<c:out value="${ resultMap.paramVO.srchSubsvcNm }" />">
|
||||
</div>
|
||||
</td>
|
||||
<th>기수명</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text xl" type="text" title="구독서비스명" id="srchSubsvcGnrNm" name="srchSubsvcGnrNm" value="<c:out value="${ resultMap.paramVO.srchSubsvcGnrNm }" />">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>구독종료여부</th>
|
||||
<td colspan="3">
|
||||
<div class="td-inner">
|
||||
<div class="custom-radio-container">
|
||||
<div class="custom-radio">
|
||||
<input type="radio" name="srchSubEndAt" id="srchSubEndAt1" value="" <c:if test="${resultMap.paramVO.srchSubEndAt ne 'Y'}">checked</c:if>>
|
||||
<label for="srchSubEndAt1"/>전체</label>
|
||||
<input type="radio" name="srchSubEndAt" id="srchSubEndAt2" value="Y"<c:if test="${resultMap.paramVO.srchSubEndAt eq 'Y'}">checked</c:if>>
|
||||
<label for="srchSubEndAt2"/>진행중</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="form-control-container">
|
||||
<div class="left"></div>
|
||||
<div class="center">
|
||||
<button class="btn outline" id="resetBtn" type="button">초기화</button>
|
||||
<button class="btn primary" id="searchBtn" type="button" onclick="fn_select_list(1);"><spring:message code="button.search"/> </button>
|
||||
</div>
|
||||
<div class="right">
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<div id="pageDiv">
|
||||
</div>
|
||||
</form>
|
||||
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="modalDiv">asfasdfasdaf</div>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
@@ -22,6 +22,13 @@
|
||||
fn_check_BoxControl(amtCndUseAt,amtCndAditAmt);
|
||||
fn_check_BoxControl(cntCndUseAt,cntCndAditAmt);
|
||||
|
||||
const amtCndUseAt2 = document.querySelector('#amtCndUseAt2');
|
||||
const amtCndAditAmt2 = document.querySelector('#amtCndAditAmt2');
|
||||
const cntCndUseAt2 = document.querySelector('#cntCndUseAt2');
|
||||
const cntCndAditAmt2 = document.querySelector('#cntCndAditAmt2');
|
||||
fn_check_BoxControl(amtCndUseAt2,amtCndAditAmt2);
|
||||
fn_check_BoxControl(cntCndUseAt2,cntCndAditAmt2);
|
||||
|
||||
/** 묶음배송 체크박스 컨트롤 */
|
||||
const bundleDlvyY = document.querySelector('#bundleDlvyY');
|
||||
const bundleDlvyN = document.querySelector('#bundleDlvyN');
|
||||
@@ -29,16 +36,30 @@
|
||||
fn_click_bundleDlvy(bundleDlvyY, bundleDlvyCndAmt);
|
||||
fn_click_bundleDlvy(bundleDlvyN, bundleDlvyCndAmt);
|
||||
|
||||
const bundleDlvyY2 = document.querySelector('#bundleDlvyY2');
|
||||
const bundleDlvyN2 = document.querySelector('#bundleDlvyN2');
|
||||
const bundleDlvyCndAmt2 = document.querySelector('#bundleDlvyCndAmt2');
|
||||
fn_click_bundleDlvy(bundleDlvyY2, bundleDlvyCndAmt2);
|
||||
fn_click_bundleDlvy(bundleDlvyN2, bundleDlvyCndAmt2);
|
||||
|
||||
/** 배송권역 셀렉트박스 컨트롤 */
|
||||
const dlvyAreaAditAt1 = document.querySelector('#dlvyAreaAditAt');
|
||||
const areaAditDlvyAmt1 = document.querySelector('#areaAditDlvyAmt');
|
||||
fn_change_dlvyArea(dlvyAreaAditAt1, areaAditDlvyAmt1);
|
||||
|
||||
const dlvyAreaAditAt2 = document.querySelector('#dlvyAreaAditAt2');
|
||||
const areaAditDlvyAmt2 = document.querySelector('#areaAditDlvyAmt2');
|
||||
fn_change_dlvyArea(dlvyAreaAditAt2, areaAditDlvyAmt2);
|
||||
|
||||
//왕복 여부 체크박스 컨트롤
|
||||
const returnDlvyApplcAt = document.querySelector('#returnDlvyApplcAt');
|
||||
const exchngDlvyAmt = document.querySelector('#exchngDlvyAmt');
|
||||
const returnDlvyApplcAt = document.querySelector('#returnDlvyApplcAt');
|
||||
const exchngDlvyAmt = document.querySelector('#exchngDlvyAmt');
|
||||
fn_check_BoxControl(returnDlvyApplcAt,exchngDlvyAmt);
|
||||
|
||||
const returnDlvyApplcAt2 = document.querySelector('#returnDlvyApplcAt2');
|
||||
const exchngDlvyAmt2 = document.querySelector('#exchngDlvyAmt2');
|
||||
fn_check_BoxControl(returnDlvyApplcAt2,exchngDlvyAmt2);
|
||||
|
||||
if ($(".input-text.number").val() === '' || $(".input-text.number").val() == null) {
|
||||
$(".input-text.number").val('0');
|
||||
}
|
||||
@@ -59,14 +80,14 @@
|
||||
<h3 class="content-section__title">배송비</h3>
|
||||
<div class="table-wrapper">
|
||||
<table class="table">
|
||||
<caption>배송그룹 배송비</caption>
|
||||
<caption>배송그룹 배송비(KR)</caption>
|
||||
<colgroup>
|
||||
<col style="width: 12%;">
|
||||
<col>
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>기본 배송비</th>
|
||||
<th>기본 배송비(KR)</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="input-container">
|
||||
@@ -80,18 +101,28 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>조건(다중선택가능)</th>
|
||||
<th>조건(다중선택가능)(KR)</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="b-checkbox-container">
|
||||
<label class="b-checkbox checkbox">
|
||||
<input type="checkbox" id="amtCndUseAt" name="amtCndUseAt" value="Y" <c:if test="${ resultMap.dlvyGroup.amtCndUseAt eq 'Y' }">checked="checked"</c:if>>
|
||||
<input type="checkbox" id="amtCndUseAt" name="amtCndUseAt"
|
||||
<c:choose>
|
||||
<c:when test="${ resultMap.dlvyGroup.amtCndUseAt eq 'Y' }"> value="Y" </c:when>
|
||||
<c:otherwise> value="N" </c:otherwise>
|
||||
</c:choose>
|
||||
<c:if test="${ resultMap.dlvyGroup.amtCndUseAt eq 'Y' }">checked="checked"</c:if>>
|
||||
<span style="margin-right: 5px;" class="check"></span>
|
||||
<input type="text" class="input-text sm right number" <c:if test="${ resultMap.dlvyGroup.amtCndUseAt ne 'Y' }">disabled="disabled"</c:if> value="<fmt:formatNumber value='${resultMap.dlvyGroup.amtCndAditAmt}' pattern="#,###" />" title="금액 조건" id="amtCndAditAmt" name="amtCndAditAmt" maxlength="13">
|
||||
</label>
|
||||
<span class="control-label">${curUnit} 이상일 때 무료배송</span>
|
||||
<label class="b-checkbox checkbox">
|
||||
<input type="checkbox" id="cntCndUseAt" name="cntCndUseAt" value="Y" <c:if test="${ resultMap.dlvyGroup.cntCndUseAt eq 'Y' }">checked="checked"</c:if>>
|
||||
<input type="checkbox" id="cntCndUseAt" name="cntCndUseAt"
|
||||
<c:choose>
|
||||
<c:when test="${ resultMap.dlvyGroup.cntCndUseAt eq 'Y' }"> value="Y" </c:when>
|
||||
<c:otherwise> value="N" </c:otherwise>
|
||||
</c:choose>
|
||||
<c:if test="${ resultMap.dlvyGroup.cntCndUseAt eq 'Y' }">checked="checked"</c:if>>
|
||||
<span style="margin-right: 5px;" class="check"></span>
|
||||
<input type="text" class="input-text sm right number" <c:if test="${ resultMap.dlvyGroup.cntCndUseAt ne 'Y' }">disabled="disabled"</c:if> value="<fmt:formatNumber value='${resultMap.dlvyGroup.cntCndAditAmt}' pattern="#,###" />" title="구매 개수 조건" id="cntCndAditAmt" name="cntCndAditAmt" maxlength="13">
|
||||
</label>
|
||||
@@ -101,7 +132,7 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th rowspan="2">묶음배송</th>
|
||||
<th rowspan="2">묶음배송(KR)</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="custom-radio-container">
|
||||
@@ -144,7 +175,7 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th rowspan="2">배송 권역</th>
|
||||
<th rowspan="2">배송 권역(KR)</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="select-box">
|
||||
@@ -161,7 +192,7 @@
|
||||
<div class="td-inner">
|
||||
<div class="td-inner vertical">
|
||||
<div class="input-container">
|
||||
<span class="mr-10 fw-500">오키나와, 홋카이도 추가 배송비</span>
|
||||
<span class="mr-10 fw-500">도서산간지역+제주지역 추가 배송비</span>
|
||||
<input type="text" class="input-text sm right number" id="areaAditDlvyAmt"
|
||||
name="areaAditDlvyAmt" <c:if test="${ resultMap.dlvyGroup.dlvyAreaAditAt ne 'Y' }">disabled="disabled"</c:if>
|
||||
value="<fmt:formatNumber value='${resultMap.dlvyGroup.areaAditDlvyAmt}' pattern="#,###" />"
|
||||
@@ -173,7 +204,7 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th rowspan="2">반품배송비</th>
|
||||
<th rowspan="2">반품배송비(KR)</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="input-container">
|
||||
@@ -184,7 +215,12 @@
|
||||
</div>
|
||||
<div class="b-checkbox-container">
|
||||
<label class="b-checkbox checkbox">
|
||||
<input type="checkbox" id="returnDlvyApplcAt" name="returnDlvyApplcAt" value="Y" <c:if test="${ resultMap.dlvyGroup.returnDlvyApplcAt eq 'Y' }">checked="checked"</c:if>>
|
||||
<input type="checkbox" id="returnDlvyApplcAt" name="returnDlvyApplcAt"
|
||||
<c:choose>
|
||||
<c:when test="${ resultMap.dlvyGroup.returnDlvyApplcAt eq 'Y' }"> value="Y" </c:when>
|
||||
<c:otherwise> value="N" </c:otherwise>
|
||||
</c:choose>
|
||||
<c:if test="${ resultMap.dlvyGroup.returnDlvyApplcAt eq 'Y' }">checked="checked"</c:if>>
|
||||
<span style="margin-right: 5px;" class="check"></span>
|
||||
</label>
|
||||
<span class="control-label">왕복 여부</span>
|
||||
@@ -205,4 +241,167 @@
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="table-wrapper">
|
||||
<table class="table">
|
||||
<caption>배송그룹 배송비(JP)</caption>
|
||||
<colgroup>
|
||||
<col style="width: 12%;">
|
||||
<col>
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>기본 배송비(JP)</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="input-container">
|
||||
<input type="text" class="input-text sm right number"
|
||||
value="<fmt:formatNumber value='${resultMap.dlvyGroup.dftDlvyAmt2}' pattern="#,###" />"
|
||||
title="기본배송비" name="dftDlvyAmt2" maxlength="13" >
|
||||
<span class="input-unit-text">${curUnit}</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>조건(다중선택가능)(JP)</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="b-checkbox-container">
|
||||
<label class="b-checkbox checkbox">
|
||||
<input type="checkbox" id="amtCndUseAt2" name="amtCndUseAt2"
|
||||
<c:choose>
|
||||
<c:when test="${ resultMap.dlvyGroup.amtCndUseAt2 eq 'Y' }"> value="Y" </c:when>
|
||||
<c:otherwise> value="N" </c:otherwise>
|
||||
</c:choose>
|
||||
<c:if test="${ resultMap.dlvyGroup.amtCndUseAt2 eq 'Y' }">checked="checked"</c:if>>
|
||||
<span style="margin-right: 5px;" class="check"></span>
|
||||
<input type="text" class="input-text sm right number" <c:if test="${ resultMap.dlvyGroup.amtCndUseAt2 ne 'Y' }">disabled="disabled"</c:if> value="<fmt:formatNumber value='${resultMap.dlvyGroup.amtCndAditAmt2}' pattern="#,###" />" title="금액 조건" id="amtCndAditAmt2" name="amtCndAditAmt2" maxlength="13">
|
||||
</label>
|
||||
<span class="control-label">${curUnit} 이상일 때 무료배송</span>
|
||||
<label class="b-checkbox checkbox">
|
||||
<input type="checkbox" id="cntCndUseAt2" name="cntCndUseAt2"
|
||||
<c:choose>
|
||||
<c:when test="${ resultMap.dlvyGroup.cntCndUseAt2 eq 'Y' }"> value="Y" </c:when>
|
||||
<c:otherwise> value="N" </c:otherwise>
|
||||
</c:choose>
|
||||
<c:if test="${ resultMap.dlvyGroup.cntCndUseAt2 eq 'Y' }">checked="checked"</c:if>>
|
||||
<span style="margin-right: 5px;" class="check"></span>
|
||||
<input type="text" class="input-text sm right number" <c:if test="${ resultMap.dlvyGroup.cntCndUseAt2 ne 'Y' }">disabled="disabled"</c:if> value="<fmt:formatNumber value='${resultMap.dlvyGroup.cntCndAditAmt2}' pattern="#,###" />" title="구매 개수 조건" id="cntCndAditAmt2" name="cntCndAditAmt2" maxlength="13">
|
||||
</label>
|
||||
<span class="control-label">개 이상일 때 무료배송</span>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th rowspan="2">묶음배송(JP)</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="custom-radio-container">
|
||||
<div class="custom-radio">
|
||||
<input type="radio" id="bundleDlvyY2" name="bundleDlvyUseAt2" value="Y"
|
||||
<c:if test="${resultMap.dlvyGroup.bundleDlvyUseAt2 eq 'Y' }">checked="checked"</c:if> <c:if test="${empty resultMap.dlvyGroup.bundleDlvyUseAt2}">checked="checked"</c:if> >
|
||||
<label for="bundleDlvyY2">사용함</label>
|
||||
</div>
|
||||
<div class="custom-radio">
|
||||
<input type="radio" id="bundleDlvyN2" name="bundleDlvyUseAt2" value="N"
|
||||
<c:if test="${resultMap.dlvyGroup.bundleDlvyUseAt2 eq 'N' }">checked="checked"</c:if>>
|
||||
<label for="bundleDlvyN2">사용안함</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="td-inner vertical">
|
||||
<div class="input-container">
|
||||
<span class="mr-10">묶음배송 상품 금액 합이</span>
|
||||
<input type="text" class="input-text sm right number"
|
||||
<c:if test="${resultMap.dlvyGroup.bundleDlvyUseAt2 eq 'N' }">disabled="disabled"</c:if>
|
||||
value="<fmt:formatNumber value='${resultMap.dlvyGroup.bundleDlvyCndAmt2}' pattern="#,###" />"
|
||||
title="묶음배송 조건" id="bundleDlvyCndAmt2" name="bundleDlvyCndAmt2" maxlength="13">
|
||||
<span class="input-unit-text mr-8">${curUnit}</span>
|
||||
<span>이상일 때 무료배송</span>
|
||||
</div>
|
||||
<div class="gray-7">
|
||||
<p class="fyi">값을 1${curUnit} 이상 입력 하신 경우 설정이 가능 합니다.</p>
|
||||
<p class="fyi">묶음배송을 사용함으로 설정하신 상품의 경우에만 해당 조건이 적용됩니다.</p>
|
||||
<p class="fyi">묶음배송 상품이 아닌 경우, 상품별로 각각 배송비가 부과될 수 있습니다.</p>
|
||||
<p class="fyi">묶음배송 상품은 2개 이상 주문해야 무료배송 조건이 적용됩니다.</p>
|
||||
<p class="fyi">무료배송 처리된 묶음배송 상품이 있을 경우, 전체 묶음배송 상품이 무료배송 처리됩니다.
|
||||
</p>
|
||||
<p class="fyi">묶음배송 상품인 경우, 금액이 가장 높은 기본 배송비를 한 번만 부과합니다.</p>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th rowspan="2">배송 권역(JP)</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="select-box">
|
||||
<select title="배송권역 사용여부" id="dlvyAreaAditAt2" name="dlvyAreaAditAt2">
|
||||
<option value="N" <c:if test="${ resultMap.dlvyGroup.dlvyAreaAditAt2 ne 'Y' }">selected="selected"</c:if>>사용안함</option>
|
||||
<option value="Y" <c:if test="${ resultMap.dlvyGroup.dlvyAreaAditAt2 eq 'Y' }">selected="selected"</c:if>>2권역</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="td-inner vertical">
|
||||
<div class="input-container">
|
||||
<span class="mr-10 fw-500">도서산간지역 추가 배송비</span>
|
||||
<input type="text" class="input-text sm right number" id="areaAditDlvyAmt2"
|
||||
name="areaAditDlvyAmt2" <c:if test="${ resultMap.dlvyGroup.dlvyAreaAditAt2 ne 'Y' }">disabled="disabled"</c:if>
|
||||
value="<fmt:formatNumber value='${resultMap.dlvyGroup.areaAditDlvyAmt2}' pattern="#,###" />"
|
||||
title="배송권역에 대한 추가 배송비" maxlength="13">
|
||||
<span class="input-unit-text mr-8">${curUnit}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th rowspan="2">반품배송비(JP)</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="input-container">
|
||||
<span>편도 :
|
||||
<input type="text" class="input-text sm right number" value="<fmt:formatNumber value='${resultMap.dlvyGroup.returnDlvyAmt2}' pattern="#,###" />" title="편도반품배송비" id="returnDlvyAmt2" name="returnDlvyAmt2" maxlength="13">
|
||||
${curUnit}
|
||||
</span>
|
||||
</div>
|
||||
<div class="b-checkbox-container">
|
||||
<label class="b-checkbox checkbox">
|
||||
<input type="checkbox" id="returnDlvyApplcAt2" name="returnDlvyApplcAt2"
|
||||
<c:choose>
|
||||
<c:when test="${ resultMap.dlvyGroup.returnDlvyApplcAt2 eq 'Y' }"> value="Y" </c:when>
|
||||
<c:otherwise> value="N" </c:otherwise>
|
||||
</c:choose>
|
||||
<c:if test="${ resultMap.dlvyGroup.returnDlvyApplcAt2 eq 'Y' }">checked="checked"</c:if>>
|
||||
<span style="margin-right: 5px;" class="check"></span>
|
||||
</label>
|
||||
<span class="control-label">왕복 여부</span>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="input-container">
|
||||
<span>왕복 :
|
||||
<input type="text" class="input-text sm right number" value="<fmt:formatNumber value='${resultMap.dlvyGroup.exchngDlvyAmt2}' pattern="#,###" />" title="왕복반품배송비" id="exchngDlvyAmt2" name="exchngDlvyAmt2" maxlength="13" <c:if test="${resultMap.dlvyGroup.returnDlvyApplcAt2 ne 'Y'}"> disabled="disabled" </c:if> >
|
||||
${curUnit}
|
||||
</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
@@ -134,12 +134,14 @@ since : 2023.11.28 전일찬 최초 생성11
|
||||
******************************************************** */
|
||||
const fn_check_BoxControl = function(checkbox, textbox) {
|
||||
$(checkbox).on('click', function(){
|
||||
let targetValue = checkbox.value;
|
||||
// let targetValue = checkbox.value;
|
||||
if(checkbox.checked == true){
|
||||
targetValue = 'Y';
|
||||
// targetValue = 'Y';
|
||||
checkbox.value = "Y";
|
||||
textbox.disabled = false;
|
||||
} else {
|
||||
targetValue = 'N';
|
||||
// targetValue = 'N';
|
||||
checkbox.value = "N";
|
||||
textbox.disabled = true;
|
||||
textbox.value= '0';
|
||||
}
|
||||
@@ -205,6 +207,46 @@ since : 2023.11.28 전일찬 최초 생성11
|
||||
$('#address').val(data.roadAddress);
|
||||
}
|
||||
}
|
||||
|
||||
/**********************************************
|
||||
ibsnet api 호출
|
||||
***********************************************/
|
||||
const fn_select_postcodeJp = function (callback) {
|
||||
let postcode2 = $('#postcode2').val();
|
||||
if(postcode2 == ''){
|
||||
alert('우편번호를 입력하세요.');
|
||||
return;
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
type: 'GET',
|
||||
url: 'https://zipcloud.ibsnet.co.jp/api/search?zipcode=' + $('#postcode2').val(),
|
||||
dataType: 'jsonp',
|
||||
success: function (data) {
|
||||
// console.log("status1:", data);
|
||||
if(data.status == 200) {
|
||||
let result = data.results[0];
|
||||
|
||||
let adres = result.address1;
|
||||
let dtlAdres = [result.address2, result.address3].join(" ");
|
||||
// let prefcode = result.prefcode;
|
||||
|
||||
$("#address2").val(adres);
|
||||
$("#detailAddress2").val(dtlAdres);
|
||||
// $("#prefcode").val(prefcode); // 도도부현코드
|
||||
} else {
|
||||
alert('주소 조회가 실패하였습니다. 정상적인 우편번호를 입력하세요.');
|
||||
}
|
||||
},
|
||||
error: function (xhr, status, error) {
|
||||
console.log("status:", status);
|
||||
console.log("error:", error);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
</script>
|
||||
<body>
|
||||
|
||||
@@ -258,7 +300,7 @@ since : 2023.11.28 전일찬 최초 생성11
|
||||
<div id="PayDlvy" class="content-tab__content">
|
||||
</div>
|
||||
<section class="content-section">
|
||||
<h3 class="content-section__title">반송지</h3>
|
||||
<h3 class="content-section__title">반송지(KR)</h3>
|
||||
<div class="table-wrapper">
|
||||
<table class="table">
|
||||
<colgroup>
|
||||
@@ -306,6 +348,55 @@ since : 2023.11.28 전일찬 최초 생성11
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
<section class="content-section">
|
||||
<h3 class="content-section__title">반송지(JP)</h3>
|
||||
<div class="table-wrapper">
|
||||
<table class="table">
|
||||
<colgroup>
|
||||
<col style="width: 12%;">
|
||||
<col>
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>주소</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="address-group">
|
||||
<div class="address-line">
|
||||
<span class="address-line__title">우편번호</span>
|
||||
<input type="text" class="input-text xsm mr-2" value=""
|
||||
title="반송지 우편번호" id="postcode2" name="rtnlcZip2">
|
||||
<button type="button" onclick="fn_select_postcodeJp(); return false;" class="address-line__find-btn">주소찾기</button>
|
||||
</div>
|
||||
<div class="address-line">
|
||||
<span class="address-line__title">주소</span>
|
||||
<input type="text" class="input-text lg" value="" readonly
|
||||
title="반송지 주소" id="address2" name="rtnlcAdres2">
|
||||
</div>
|
||||
<div class="address-line">
|
||||
<span class="address-line__title">상세주소</span>
|
||||
<input type="text" class="input-text md" value="" maxlength="35"
|
||||
title="반송지 상세주소" id="detailAddress2" name="rtnlcDtlAdres2">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>전화번호</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="phone-container">
|
||||
<input type="text" class="input-text sm phone" value=""
|
||||
title="전화번호" id="rtnlcTelnb2" maxlength="13" name="rtnlcTelnb2">
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
</form>
|
||||
</div>
|
||||
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
|
||||
|
||||
@@ -122,6 +122,45 @@
|
||||
}
|
||||
}
|
||||
|
||||
/**********************************************
|
||||
ibsnet api 호출
|
||||
***********************************************/
|
||||
const fn_select_postcodeJp = function (callback) {
|
||||
let postcode2 = $('#postcode2').val();
|
||||
if(postcode2 == ''){
|
||||
alert('우편번호를 입력하세요.');
|
||||
return;
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
type: 'GET',
|
||||
url: 'https://zipcloud.ibsnet.co.jp/api/search?zipcode=' + $('#postcode2').val(),
|
||||
dataType: 'jsonp',
|
||||
success: function (data) {
|
||||
// console.log("status1:", data);
|
||||
if(data.status == 200) {
|
||||
let result = data.results[0];
|
||||
|
||||
let adres = result.address1;
|
||||
let dtlAdres = [result.address2, result.address3].join(" ");
|
||||
// let prefcode = result.prefcode;
|
||||
|
||||
$("#address2").val(adres);
|
||||
$("#detailAddress2").val(dtlAdres);
|
||||
// $("#prefcode").val(prefcode); // 도도부현코드
|
||||
} else {
|
||||
alert('주소 조회가 실패하였습니다. 정상적인 우편번호를 입력하세요.');
|
||||
}
|
||||
},
|
||||
error: function (xhr, status, error) {
|
||||
console.log("status:", status);
|
||||
console.log("error:", error);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 배송권역 변경 시 value 값 변경
|
||||
******************************************************** */
|
||||
@@ -157,12 +196,14 @@
|
||||
******************************************************** */
|
||||
const fn_check_BoxControl = function(checkbox, textbox) {
|
||||
$(checkbox).on('click', function(){
|
||||
let targetValue = checkbox.value;
|
||||
// let targetValue = checkbox.value;
|
||||
if(checkbox.checked == true){
|
||||
targetValue = "Y";
|
||||
// targetValue = "Y";
|
||||
checkbox.value = "Y";
|
||||
textbox.disabled = false;
|
||||
} else {
|
||||
targetValue = "N";
|
||||
// targetValue = "N";
|
||||
checkbox.value = "N";
|
||||
textbox.disabled = true;
|
||||
textbox.value= '0';
|
||||
}
|
||||
@@ -227,6 +268,7 @@
|
||||
<form id="DlvyForm" method="post" action="/mngr/setup/dlvygrp/updateDlvyGroupDtl">
|
||||
<input type="hidden" id="dlvyGroupInnb" name="dlvyGroupInnb" value="<c:out value="${resultMap.dlvyGroup.dlvyGroupInnb}"/>"/>
|
||||
<input type="hidden" id="rtnlcInnb" name="rtnlcInnb" value="<c:out value="${resultMap.dlvyGroup.rtnlcInnb}"/>"/>
|
||||
<input type="hidden" id="rtnlcInnb2" name="rtnlcInnb2" value="<c:out value="${resultMap.dlvyGroup.rtnlcInnb2}"/>"/>
|
||||
<section class="content-section">
|
||||
<h3 class="content-section__title">배송그룹명</h3>
|
||||
<div class="table-wrapper">
|
||||
@@ -256,7 +298,7 @@
|
||||
<div id="PayDlvy" class="content-tab__content">
|
||||
</div>
|
||||
<section class="content-section">
|
||||
<h3 class="content-section__title">반송지</h3>
|
||||
<h3 class="content-section__title">반송지(KR)</h3>
|
||||
<div class="table-wrapper">
|
||||
<table class="table">
|
||||
<colgroup>
|
||||
@@ -300,6 +342,51 @@
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
<section class="content-section">
|
||||
<h3 class="content-section__title">반송지(JP)</h3>
|
||||
<div class="table-wrapper">
|
||||
<table class="table">
|
||||
<colgroup>
|
||||
<col style="width: 12%;">
|
||||
<col>
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>주소</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="address-group">
|
||||
<div class="address-line">
|
||||
<span class="address-line__title">우편번호</span>
|
||||
<input type="text" class="input-text xsm mr-2" value="<c:out value="${resultMap.dlvyGroup.rtnlcZip2}"/>" title="반송지 우편번호" id="rtnlcZip2" name="rtnlcZip2">
|
||||
<button type="button" onclick="fn_select_postcodeJp(); return false;" class="address-line__find-btn">주소찾기</button>
|
||||
</div>
|
||||
<div class="address-line">
|
||||
<span class="address-line__title">주소</span>
|
||||
<input type="text" class="input-text lg" value="<c:out value="${resultMap.dlvyGroup.rtnlcAdres2}"/>" title="반송지 주소" id="rtnlcAdres2" name="rtnlcAdres2">
|
||||
</div>
|
||||
<div class="address-line">
|
||||
<span class="address-line__title">상세주소</span>
|
||||
<input type="text" class="input-text md" value="<c:out value="${resultMap.dlvyGroup.rtnlcDtlAdres2}"/>" maxlength="35" title="반송지 상세주소" id="rtnlcDtlAdres2" name="rtnlcDtlAdres2">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>전화번호</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="phone-container">
|
||||
<input type="text" class="input-text m phone" value="<c:out value="${resultMap.dlvyGroup.rtnlcTelnb2}"/>" title="전화번호" id="rtnlcTelnb2" maxlength="13" name="rtnlcTelnb2">
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
</form>
|
||||
</div>
|
||||
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
|
||||
|
||||
@@ -19,6 +19,10 @@
|
||||
const areaAditDlvyAmt = document.querySelector('#areaAditDlvyAmt');
|
||||
fn_change_dlvyArea(dlvyAreaAditAt, areaAditDlvyAmt);
|
||||
|
||||
const dlvyAreaAditAt2 = document.querySelector('#dlvyAreaAditAt2');
|
||||
const areaAditDlvyAmt2 = document.querySelector('#areaAditDlvyAmt2');
|
||||
fn_change_dlvyArea(dlvyAreaAditAt2, areaAditDlvyAmt2);
|
||||
|
||||
if ($(".input-text.number").val() === '' || $(".input-text.number").val() == null) {
|
||||
$(".input-text.number").val('0');
|
||||
}
|
||||
@@ -34,6 +38,10 @@
|
||||
const returnDlvyApplcAt = document.querySelector('#returnDlvyApplcAt');
|
||||
const exchngDlvyAmt = document.querySelector('#exchngDlvyAmt');
|
||||
fn_check_BoxControl(returnDlvyApplcAt,exchngDlvyAmt);
|
||||
|
||||
const returnDlvyApplcAt2 = document.querySelector('#returnDlvyApplcAt2');
|
||||
const exchngDlvyAmt2 = document.querySelector('#exchngDlvyAmt2');
|
||||
fn_check_BoxControl(returnDlvyApplcAt2,exchngDlvyAmt2);
|
||||
});
|
||||
</script>
|
||||
<spring:eval expression="@environment.getProperty('currency-unit.default')" var="curUnit"/>
|
||||
@@ -42,14 +50,14 @@
|
||||
<h3 class="content-section__title">배송비</h3>
|
||||
<div class="table-wrapper">
|
||||
<table class="table">
|
||||
<caption>배송그룹 배송비</caption>
|
||||
<caption>배송그룹 배송비(KR)</caption>
|
||||
<colgroup>
|
||||
<col style="width: 12%;">
|
||||
<col>
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th rowspan="2">배송 권역</th>
|
||||
<th rowspan="2">배송 권역(KR)</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="select-box">
|
||||
@@ -66,7 +74,7 @@
|
||||
<div class="td-inner">
|
||||
<div class="td-inner vertical">
|
||||
<div class="input-container">
|
||||
<span class="mr-10 fw-500">오키나와, 홋카이도 추가 배송비</span>
|
||||
<span class="mr-10 fw-500">도서산간지역+제주지역 추가 배송비</span>
|
||||
<input type="text" class="input-text sm right number" id="areaAditDlvyAmt"
|
||||
name="areaAditDlvyAmt" <c:if test="${ resultMap.dlvyGroup.dlvyAreaAditAt ne 'Y' }">disabled="disabled"</c:if>
|
||||
value="<fmt:formatNumber value='${resultMap.dlvyGroup.areaAditDlvyAmt}' pattern="#,###" />"
|
||||
@@ -78,7 +86,7 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th rowspan="2">반품배송비</th>
|
||||
<th rowspan="2">반품배송비(KR)</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="input-container">
|
||||
@@ -89,7 +97,12 @@
|
||||
</div>
|
||||
<div class="b-checkbox-container">
|
||||
<label class="b-checkbox checkbox">
|
||||
<input type="checkbox" id="returnDlvyApplcAt" name="returnDlvyApplcAt" value="Y" <c:if test="${ resultMap.dlvyGroup.returnDlvyApplcAt eq 'Y' }">checked="checked"</c:if>>
|
||||
<input type="checkbox" id="returnDlvyApplcAt" name="returnDlvyApplcAt"
|
||||
<c:choose>
|
||||
<c:when test="${ resultMap.dlvyGroup.returnDlvyApplcAt eq 'Y' }"> value="Y" </c:when>
|
||||
<c:otherwise> value="N" </c:otherwise>
|
||||
</c:choose>
|
||||
<c:if test="${ resultMap.dlvyGroup.returnDlvyApplcAt eq 'Y' }">checked="checked"</c:if>>
|
||||
<span style="margin-right: 5px;" class="check"></span>
|
||||
</label>
|
||||
<span class="control-label">왕복 여부</span>
|
||||
@@ -110,4 +123,79 @@
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="table-wrapper">
|
||||
<table class="table">
|
||||
<caption>배송그룹 배송비(JP)</caption>
|
||||
<colgroup>
|
||||
<col style="width: 12%;">
|
||||
<col>
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th rowspan="2">배송 권역(JP)</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="select-box">
|
||||
<select title="배송권역 사용여부" id="dlvyAreaAditAt2" name="dlvyAreaAditAt2">
|
||||
<option value="N" <c:if test="${ resultMap.dlvyGroup.dlvyAreaAditAt2 ne 'Y' }">selected="selected"</c:if>>사용안함</option>
|
||||
<option value="Y" <c:if test="${ resultMap.dlvyGroup.dlvyAreaAditAt2 eq 'Y' }">selected="selected"</c:if>>2권역</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="td-inner vertical">
|
||||
<div class="input-container">
|
||||
<span class="mr-10 fw-500">도서산간지역 추가 배송비</span>
|
||||
<input type="text" class="input-text sm right number" id="areaAditDlvyAmt2"
|
||||
name="areaAditDlvyAmt2" <c:if test="${ resultMap.dlvyGroup.dlvyAreaAditAt ne 'Y' }">disabled="disabled"</c:if>
|
||||
value="<fmt:formatNumber value='${resultMap.dlvyGroup.areaAditDlvyAmt}' pattern="#,###" />"
|
||||
title="배송권역에 대한 추가 배송비" maxlength="13">
|
||||
<span class="input-unit-text mr-8">${curUnit}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th rowspan="2">반품배송비(JP)</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="input-container">
|
||||
<span>편도 :
|
||||
<input type="text" class="input-text sm right number" value="<fmt:formatNumber value='${resultMap.dlvyGroup.returnDlvyAmt2}' pattern="#,###" />" title="편도반품배송비" id="returnDlvyAmt2" name="returnDlvyAmt2" maxlength="13">
|
||||
${curUnit}
|
||||
</span>
|
||||
</div>
|
||||
<div class="b-checkbox-container">
|
||||
<label class="b-checkbox checkbox">
|
||||
<input type="checkbox" id="returnDlvyApplcAt2" name="returnDlvyApplcAt2"
|
||||
<c:choose>
|
||||
<c:when test="${ resultMap.dlvyGroup.returnDlvyApplcAt eq 'Y' }"> value="Y" </c:when>
|
||||
<c:otherwise> value="N" </c:otherwise>
|
||||
</c:choose>
|
||||
<c:if test="${ resultMap.dlvyGroup.returnDlvyApplcAt2 eq 'Y' }">checked="checked"</c:if>>
|
||||
<span style="margin-right: 5px;" class="check"></span>
|
||||
</label>
|
||||
<span class="control-label">왕복 여부</span>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="input-container">
|
||||
<span>왕복 :
|
||||
<input type="text" class="input-text sm right number" value="<fmt:formatNumber value='${resultMap.dlvyGroup.exchngDlvyAmt2}' pattern="#,###" />" title="왕복반품배송비" id="exchngDlvyAmt2" name="exchngDlvyAmt2" maxlength="13" <c:if test="${resultMap.dlvyGroup.returnDlvyApplcAt2 ne 'Y'}"> disabled="disabled" </c:if> >
|
||||
${curUnit}
|
||||
</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
@@ -14,25 +14,63 @@
|
||||
--%>
|
||||
<script type="text/javascript">
|
||||
$( document ).ready(function() {
|
||||
/** 배송권역 셀렉트박스 컨트롤 */
|
||||
const dlvyAreaAditAt1 = document.querySelector('#dlvyAreaAditAt');
|
||||
const areaAditDlvyAmt1 = document.querySelector('#areaAditDlvyAmt');
|
||||
fn_change_dlvyArea(dlvyAreaAditAt1, areaAditDlvyAmt1);
|
||||
/** 유료배송 조건 체크박스 컨트롤 */
|
||||
// const amtCndUseAt = document.querySelector('#amtCndUseAt');
|
||||
// const amtCndAditAmt = document.querySelector('#amtCndAditAmt');
|
||||
const cntCndUseAt = document.querySelector('#cntCndUseAt');
|
||||
const cntCndAditAmt = document.querySelector('#cntCndAditAmt');
|
||||
// fn_check_BoxControl(amtCndUseAt,amtCndAditAmt);
|
||||
fn_check_BoxControl(cntCndUseAt,cntCndAditAmt);
|
||||
|
||||
// const amtCndUseAt2 = document.querySelector('#amtCndUseAt2');
|
||||
// const amtCndAditAmt2 = document.querySelector('#amtCndAditAmt2');
|
||||
const cntCndUseAt2 = document.querySelector('#cntCndUseAt2');
|
||||
const cntCndAditAmt2 = document.querySelector('#cntCndAditAmt2');
|
||||
// fn_check_BoxControl(amtCndUseAt2,amtCndAditAmt2);
|
||||
fn_check_BoxControl(cntCndUseAt2,cntCndAditAmt2);
|
||||
|
||||
/** 묶음배송 체크박스 컨트롤 */
|
||||
// const bundleDlvyY = document.querySelector('#bundleDlvyY');
|
||||
// const bundleDlvyN = document.querySelector('#bundleDlvyN');
|
||||
// const bundleDlvyCndAmt = document.querySelector('#bundleDlvyCndAmt');
|
||||
// fn_click_bundleDlvy(bundleDlvyY, bundleDlvyCndAmt);
|
||||
// fn_click_bundleDlvy(bundleDlvyN, bundleDlvyCndAmt);
|
||||
//
|
||||
// const bundleDlvyY2 = document.querySelector('#bundleDlvyY2');
|
||||
// const bundleDlvyN2 = document.querySelector('#bundleDlvyN2');
|
||||
// const bundleDlvyCndAmt2 = document.querySelector('#bundleDlvyCndAmt2');
|
||||
// fn_click_bundleDlvy(bundleDlvyY2, bundleDlvyCndAmt2);
|
||||
// fn_click_bundleDlvy(bundleDlvyN2, bundleDlvyCndAmt2);
|
||||
|
||||
/** 배송권역 셀렉트박스 컨트롤 */
|
||||
const dlvyAreaAditAt1 = document.querySelector('#dlvyAreaAditAt');
|
||||
const areaAditDlvyAmt1 = document.querySelector('#areaAditDlvyAmt');
|
||||
fn_change_dlvyArea(dlvyAreaAditAt1, areaAditDlvyAmt1);
|
||||
|
||||
const dlvyAreaAditAt2 = document.querySelector('#dlvyAreaAditAt2');
|
||||
const areaAditDlvyAmt2 = document.querySelector('#areaAditDlvyAmt2');
|
||||
fn_change_dlvyArea(dlvyAreaAditAt2, areaAditDlvyAmt2);
|
||||
|
||||
//왕복 여부 체크박스 컨트롤
|
||||
const returnDlvyApplcAt = document.querySelector('#returnDlvyApplcAt');
|
||||
const exchngDlvyAmt = document.querySelector('#exchngDlvyAmt');
|
||||
fn_check_BoxControl(returnDlvyApplcAt,exchngDlvyAmt);
|
||||
|
||||
const returnDlvyApplcAt2 = document.querySelector('#returnDlvyApplcAt2');
|
||||
const exchngDlvyAmt2 = document.querySelector('#exchngDlvyAmt2');
|
||||
fn_check_BoxControl(returnDlvyApplcAt2,exchngDlvyAmt2);
|
||||
|
||||
if ($(".input-text.number").val() === '' || $(".input-text.number").val() == null) {
|
||||
$(".input-text.number").val('0');
|
||||
}
|
||||
|
||||
$(".input-text.number").on("focus", function () {
|
||||
|
||||
if ($(this).val() === '0') {
|
||||
$(this).val('');
|
||||
}
|
||||
});
|
||||
|
||||
//왕복 여부 체크박스 컨트롤
|
||||
const returnDlvyApplcAt = document.querySelector('#returnDlvyApplcAt');
|
||||
const exchngDlvyAmt = document.querySelector('#exchngDlvyAmt');
|
||||
fn_check_BoxControl(returnDlvyApplcAt,exchngDlvyAmt);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<spring:eval expression="@environment.getProperty('currency-unit.default')" var="curUnit"/>
|
||||
@@ -41,14 +79,14 @@
|
||||
<h3 class="content-section__title">배송비</h3>
|
||||
<div class="table-wrapper">
|
||||
<table class="table">
|
||||
<caption>해당 테이블에 대한 설명</caption>
|
||||
<caption>배송그룹 배송비(KR)</caption>
|
||||
<colgroup>
|
||||
<col style="width: 12%;">
|
||||
<col>
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>기본 배송비</th>
|
||||
<th>기본 배송비(KR)</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="input-container">
|
||||
@@ -60,8 +98,85 @@
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th rowspan="2">배송 권역</th>
|
||||
<tr>
|
||||
<th>개별배송조건(KR)</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="td-inner vertical">
|
||||
<div class="b-checkbox-container">
|
||||
<%-- <label class="b-checkbox checkbox">--%>
|
||||
<%-- <input type="checkbox" id="amtCndUseAt" name="amtCndUseAt" value="Y" <c:if test="${ resultMap.dlvyGroup.amtCndUseAt eq 'Y' }">checked="checked"</c:if>>--%>
|
||||
<%-- <span style="margin-right: 5px;" class="check"></span>--%>
|
||||
<%-- <input type="text" class="input-text sm right number" <c:if test="${ resultMap.dlvyGroup.amtCndUseAt ne 'Y' }">disabled="disabled"</c:if> value="<fmt:formatNumber value='${resultMap.dlvyGroup.amtCndAditAmt}' pattern="#,###" />" title="금액 조건" id="amtCndAditAmt" name="amtCndAditAmt" maxlength="13">--%>
|
||||
<%-- </label>--%>
|
||||
<%-- <span class="control-label">${curUnit} 이상일 때 무료배송</span>--%>
|
||||
<label class="b-checkbox checkbox">
|
||||
<input type="checkbox" id="cntCndUseAt" name="cntCndUseAt"
|
||||
<c:choose>
|
||||
<c:when test="${ resultMap.dlvyGroup.cntCndUseAt eq 'Y' }"> value="Y" </c:when>
|
||||
<c:otherwise> value="N" </c:otherwise>
|
||||
</c:choose>
|
||||
<c:if test="${ resultMap.dlvyGroup.cntCndUseAt eq 'Y' }">checked="checked"</c:if>>
|
||||
<span style="margin-right: 5px;" class="check"></span>
|
||||
<input type="text" class="input-text sm right number" <c:if test="${ resultMap.dlvyGroup.cntCndUseAt ne 'Y' }">disabled="disabled"</c:if> value="<fmt:formatNumber value='${resultMap.dlvyGroup.cntCndAditAmt}' pattern="#,###" />" title="구매 개수 조건" id="cntCndAditAmt" name="cntCndAditAmt" maxlength="13">
|
||||
</label>
|
||||
<span class="control-label">개 단위로 유료배송비 추가</span>
|
||||
</div>
|
||||
<div class="gray-7">
|
||||
<p class="fyi">값을 1개 이상 입력 하신 경우 설정이 가능 합니다.</p>
|
||||
<p class="fyi">설정한 개수의 배수로 배송비가 부과됩니다.</p>
|
||||
<p class="fyi">설정하지 않을 경우, 같은 상품은 개수와 상관없이 배송비를 한 번만 부과합니다.</p>
|
||||
<p class="fyi">무료배송, 묶음배송 상품과 별도로 배송비가 적용됩니다.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<%-- <tr>--%>
|
||||
<%-- <th rowspan="2">묶음배송(KR)</th>--%>
|
||||
<%-- <td>--%>
|
||||
<%-- <div class="td-inner">--%>
|
||||
<%-- <div class="custom-radio-container">--%>
|
||||
<%-- <div class="custom-radio">--%>
|
||||
<%-- <input type="radio" id="bundleDlvyY" name="bundleDlvyUseAt" value="Y"--%>
|
||||
<%-- <c:if test="${resultMap.dlvyGroup.bundleDlvyUseAt eq 'Y' }">checked="checked"</c:if> >--%>
|
||||
<%-- <label for="bundleDlvyY">사용함</label>--%>
|
||||
<%-- </div>--%>
|
||||
<%-- <div class="custom-radio">--%>
|
||||
<%-- <input type="radio" id="bundleDlvyN" name="bundleDlvyUseAt" value="N"--%>
|
||||
<%-- <c:if test="${resultMap.dlvyGroup.bundleDlvyUseAt eq 'N' }">checked="checked"</c:if> <c:if test="${empty resultMap.dlvyGroup.bundleDlvyUseAt}">checked="checked"</c:if> >--%>
|
||||
<%-- <label for="bundleDlvyN">사용안함</label>--%>
|
||||
<%-- </div>--%>
|
||||
<%-- </div>--%>
|
||||
<%-- </div>--%>
|
||||
<%-- </td>--%>
|
||||
<%-- </tr>--%>
|
||||
<%-- <tr>--%>
|
||||
<%-- <td>--%>
|
||||
<%-- <div class="td-inner vertical">--%>
|
||||
<%-- <div class="input-container">--%>
|
||||
<%-- <span class="mr-10">묶음배송 상품 금액 합이</span>--%>
|
||||
<%-- <input type="text" class="input-text sm right number"--%>
|
||||
<%-- <c:if test="${resultMap.dlvyGroup.bundleDlvyUseAt eq 'N' }">disabled="disabled"</c:if>--%>
|
||||
<%-- value="<fmt:formatNumber value='${resultMap.dlvyGroup.bundleDlvyCndAmt}' pattern="#,###" />"--%>
|
||||
<%-- title="묶음배송 조건" id="bundleDlvyCndAmt" name="bundleDlvyCndAmt" maxlength="13">--%>
|
||||
<%-- <span class="input-unit-text mr-8">${curUnit}</span>--%>
|
||||
<%-- <span>이상일 때 무료배송</span>--%>
|
||||
<%-- </div>--%>
|
||||
<%-- <div class="gray-7">--%>
|
||||
<%-- <p class="fyi">값을 1${curUnit} 이상 입력 하신 경우 설정이 가능 합니다.</p>--%>
|
||||
<%-- <p class="fyi">묶음배송을 사용함으로 설정하신 상품의 경우에만 해당 조건이 적용됩니다.</p>--%>
|
||||
<%-- <p class="fyi">묶음배송 상품이 아닌 경우, 상품별로 각각 배송비가 부과될 수 있습니다.</p>--%>
|
||||
<%-- <p class="fyi">묶음배송 상품은 2개 이상 주문해야 무료배송 조건이 적용됩니다.</p>--%>
|
||||
<%-- <p class="fyi">무료배송 처리된 묶음배송 상품이 있을 경우, 전체 묶음배송 상품이 무료배송 처리됩니다.--%>
|
||||
<%-- </p>--%>
|
||||
<%-- <p class="fyi">묶음배송 상품인 경우, 금액이 가장 높은 기본 배송비를 한 번만 부과합니다.</p>--%>
|
||||
<%-- </div>--%>
|
||||
<%-- </div>--%>
|
||||
<%-- </td>--%>
|
||||
<%-- </tr>--%>
|
||||
<%-- <tr>--%>
|
||||
<th rowspan="2">배송 권역(KR)</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="select-box">
|
||||
@@ -78,7 +193,7 @@
|
||||
<div class="td-inner">
|
||||
<div class="td-inner vertical">
|
||||
<div class="input-container">
|
||||
<span class="mr-10 fw-500">오키나와, 홋카이도 추가 배송비</span>
|
||||
<span class="mr-10 fw-500">도서산간지역+제주지역 추가 배송비</span>
|
||||
<input type="text" class="input-text sm right number" id="areaAditDlvyAmt"
|
||||
name="areaAditDlvyAmt" <c:if test="${ resultMap.dlvyGroup.dlvyAreaAditAt ne 'Y' }">disabled="disabled"</c:if>
|
||||
value="<fmt:formatNumber value='${resultMap.dlvyGroup.areaAditDlvyAmt}' pattern="#,###" />"
|
||||
@@ -90,7 +205,7 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th rowspan="2">반품배송비</th>
|
||||
<th rowspan="2">반품배송비(KR)</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="input-container">
|
||||
@@ -101,7 +216,12 @@
|
||||
</div>
|
||||
<div class="b-checkbox-container">
|
||||
<label class="b-checkbox checkbox">
|
||||
<input type="checkbox" id="returnDlvyApplcAt" name="returnDlvyApplcAt" value="Y" <c:if test="${ resultMap.dlvyGroup.returnDlvyApplcAt eq 'Y' }">checked="checked"</c:if>>
|
||||
<input type="checkbox" id="returnDlvyApplcAt" name="returnDlvyApplcAt"
|
||||
<c:choose>
|
||||
<c:when test="${ resultMap.dlvyGroup.returnDlvyApplcAt eq 'Y' }"> value="Y" </c:when>
|
||||
<c:otherwise> value="N" </c:otherwise>
|
||||
</c:choose>
|
||||
<c:if test="${ resultMap.dlvyGroup.returnDlvyApplcAt eq 'Y' }">checked="checked"</c:if>>
|
||||
<span style="margin-right: 5px;" class="check"></span>
|
||||
</label>
|
||||
<span class="control-label">왕복 여부</span>
|
||||
@@ -121,5 +241,170 @@
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="table-wrapper">
|
||||
<table class="table">
|
||||
<caption>배송그룹 배송비(JP)</caption>
|
||||
<colgroup>
|
||||
<col style="width: 12%;">
|
||||
<col>
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>기본 배송비(JP)</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="input-container">
|
||||
<input type="text" class="input-text sm right number"
|
||||
value="<fmt:formatNumber value='${resultMap.dlvyGroup.dftDlvyAmt2}' pattern="#,###" />"
|
||||
title="기본배송비" name="dftDlvyAmt2" maxlength="10">
|
||||
<span class="input-unit-text">${curUnit}</span>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>개별배송조건(JP)</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="td-inner vertical">
|
||||
<div class="b-checkbox-container">
|
||||
<%-- <label class="b-checkbox checkbox">--%>
|
||||
<%-- <input type="checkbox" id="amtCndUseAt2" name="amtCndUseAt2" value="Y" <c:if test="${ resultMap.dlvyGroup.amtCndUseAt2 eq 'Y' }">checked="checked"</c:if>>--%>
|
||||
<%-- <span style="margin-right: 5px;" class="check"></span>--%>
|
||||
<%-- <input type="text" class="input-text sm right number" <c:if test="${ resultMap.dlvyGroup.amtCndUseAt2 ne 'Y' }">disabled="disabled"</c:if> value="<fmt:formatNumber value='${resultMap.dlvyGroup.amtCndAditAmt2}' pattern="#,###" />" title="금액 조건" id="amtCndAditAmt2" name="amtCndAditAmt2" maxlength="13">--%>
|
||||
<%-- </label>--%>
|
||||
<%-- <span class="control-label">${curUnit} 이상일 때 무료배송</span>--%>
|
||||
<label class="b-checkbox checkbox">
|
||||
<input type="checkbox" id="cntCndUseAt2" name="cntCndUseAt2"
|
||||
<c:choose>
|
||||
<c:when test="${ resultMap.dlvyGroup.cntCndUseAt2 eq 'Y' }"> value="Y" </c:when>
|
||||
<c:otherwise> value="N" </c:otherwise>
|
||||
</c:choose>
|
||||
<c:if test="${ resultMap.dlvyGroup.cntCndUseAt2 eq 'Y' }">checked="checked"</c:if>>
|
||||
<span style="margin-right: 5px;" class="check"></span>
|
||||
<input type="text" class="input-text sm right number" <c:if test="${ resultMap.dlvyGroup.cntCndUseAt2 ne 'Y' }">disabled="disabled"</c:if> value="<fmt:formatNumber value='${resultMap.dlvyGroup.cntCndAditAmt2}' pattern="#,###" />" title="구매 개수 조건" id="cntCndAditAmt2" name="cntCndAditAmt2" maxlength="13">
|
||||
</label>
|
||||
<span class="control-label">개 단위로 유료배송비 추가</span>
|
||||
</div>
|
||||
<div class="gray-7">
|
||||
<p class="fyi">값을 1개 이상 입력 하신 경우 설정이 가능 합니다.</p>
|
||||
<p class="fyi">설정한 개수의 배수로 배송비가 부과됩니다.</p>
|
||||
<p class="fyi">설정하지 않을 경우, 같은 상품은 개수와 상관없이 배송비를 한 번만 부과합니다.</p>
|
||||
<p class="fyi">무료배송, 묶음배송 상품과 별도로 배송비가 적용됩니다.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<%-- <tr>--%>
|
||||
<%-- <th rowspan="2">묶음배송(JP)</th>--%>
|
||||
<%-- <td>--%>
|
||||
<%-- <div class="td-inner">--%>
|
||||
<%-- <div class="custom-radio-container">--%>
|
||||
<%-- <div class="custom-radio">--%>
|
||||
<%-- <input type="radio" id="bundleDlvyY2" name="bundleDlvyUseAt2" value="Y"--%>
|
||||
<%-- <c:if test="${resultMap.dlvyGroup.bundleDlvyUseAt2 eq 'Y' }">checked="checked"</c:if> >--%>
|
||||
<%-- <label for="bundleDlvyY2">사용함</label>--%>
|
||||
<%-- </div>--%>
|
||||
<%-- <div class="custom-radio">--%>
|
||||
<%-- <input type="radio" id="bundleDlvyN2" name="bundleDlvyUseAt2" value="N"--%>
|
||||
<%-- <c:if test="${resultMap.dlvyGroup.bundleDlvyUseAt2 eq 'N' }">checked="checked"</c:if> <c:if test="${empty resultMap.dlvyGroup.bundleDlvyUseAt2}">checked="checked"</c:if> >--%>
|
||||
<%-- <label for="bundleDlvyN2">사용안함</label>--%>
|
||||
<%-- </div>--%>
|
||||
<%-- </div>--%>
|
||||
<%-- </div>--%>
|
||||
<%-- </td>--%>
|
||||
<%-- </tr>--%>
|
||||
<%-- <tr>--%>
|
||||
<%-- <td>--%>
|
||||
<%-- <div class="td-inner vertical">--%>
|
||||
<%-- <div class="input-container">--%>
|
||||
<%-- <span class="mr-10">묶음배송 상품 금액 합이</span>--%>
|
||||
<%-- <input type="text" class="input-text sm right number"--%>
|
||||
<%-- <c:if test="${resultMap.dlvyGroup.bundleDlvyUseAt2 eq 'N' }">disabled="disabled"</c:if>--%>
|
||||
<%-- value="<fmt:formatNumber value='${resultMap.dlvyGroup.bundleDlvyCndAmt2}' pattern="#,###" />"--%>
|
||||
<%-- title="묶음배송 조건" id="bundleDlvyCndAmt2" name="bundleDlvyCndAmt2" maxlength="13">--%>
|
||||
<%-- <span class="input-unit-text mr-8">${curUnit}</span>--%>
|
||||
<%-- <span>이상일 때 무료배송</span>--%>
|
||||
<%-- </div>--%>
|
||||
<%-- <div class="gray-7">--%>
|
||||
<%-- <p class="fyi">값을 1${curUnit} 이상 입력 하신 경우 설정이 가능 합니다.</p>--%>
|
||||
<%-- <p class="fyi">묶음배송을 사용함으로 설정하신 상품의 경우에만 해당 조건이 적용됩니다.</p>--%>
|
||||
<%-- <p class="fyi">묶음배송 상품이 아닌 경우, 상품별로 각각 배송비가 부과될 수 있습니다.</p>--%>
|
||||
<%-- <p class="fyi">묶음배송 상품은 2개 이상 주문해야 무료배송 조건이 적용됩니다.</p>--%>
|
||||
<%-- <p class="fyi">무료배송 처리된 묶음배송 상품이 있을 경우, 전체 묶음배송 상품이 무료배송 처리됩니다.--%>
|
||||
<%-- </p>--%>
|
||||
<%-- <p class="fyi">묶음배송 상품인 경우, 금액이 가장 높은 기본 배송비를 한 번만 부과합니다.</p>--%>
|
||||
<%-- </div>--%>
|
||||
<%-- </div>--%>
|
||||
<%-- </td>--%>
|
||||
<%-- </tr>--%>
|
||||
<tr>
|
||||
<th rowspan="2">배송 권역(JP)</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="select-box">
|
||||
<select title="배송권역 사용여부" id="dlvyAreaAditAt2" name="dlvyAreaAditAt2">
|
||||
<option value="N" <c:if test="${ resultMap.dlvyGroup.dlvyAreaAditAt2 ne 'Y' }">selected="selected"</c:if>>사용안함</option>
|
||||
<option value="Y" <c:if test="${ resultMap.dlvyGroup.dlvyAreaAditAt2 eq 'Y' }">selected="selected"</c:if>>2권역</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="td-inner vertical">
|
||||
<div class="input-container">
|
||||
<span class="mr-10 fw-500">도서산간지역 추가 배송비</span>
|
||||
<input type="text" class="input-text sm right number" id="areaAditDlvyAmt2"
|
||||
name="areaAditDlvyAmt2" <c:if test="${ resultMap.dlvyGroup.dlvyAreaAditAt2 ne 'Y' }">disabled="disabled"</c:if>
|
||||
value="<fmt:formatNumber value='${resultMap.dlvyGroup.areaAditDlvyAmt2}' pattern="#,###" />"
|
||||
title="배송권역에 대한 추가 배송비" maxlength="13">
|
||||
<span class="input-unit-text mr-8">${curUnit}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th rowspan="2">반품배송비(JP)</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="input-container">
|
||||
<span>편도 :
|
||||
<input type="text" class="input-text sm right number" value="<fmt:formatNumber value='${resultMap.dlvyGroup.returnDlvyAmt2}' pattern="#,###" />" title="편도반품배송비" id="returnDlvyAmt2" name="returnDlvyAmt2" maxlength="13">
|
||||
${curUnit}
|
||||
</span>
|
||||
</div>
|
||||
<div class="b-checkbox-container">
|
||||
<label class="b-checkbox checkbox">
|
||||
<input type="checkbox" id="returnDlvyApplcAt2" name="returnDlvyApplcAt2"
|
||||
<c:choose>
|
||||
<c:when test="${ resultMap.dlvyGroup.returnDlvyApplcAt2 eq 'Y' }"> value="Y" </c:when>
|
||||
<c:otherwise> value="N" </c:otherwise>
|
||||
</c:choose>
|
||||
<c:if test="${ resultMap.dlvyGroup.returnDlvyApplcAt2 eq 'Y' }">checked="checked"</c:if>>
|
||||
<span style="margin-right: 5px;" class="check"></span>
|
||||
</label>
|
||||
<span class="control-label">왕복 여부</span>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="input-container">
|
||||
<span>왕복 :
|
||||
<input type="text" class="input-text sm right number" value="<fmt:formatNumber value='${resultMap.dlvyGroup.exchngDlvyAmt2}' pattern="#,###" />" title="왕복반품배송비" id="exchngDlvyAmt2" name="exchngDlvyAmt2" maxlength="13" <c:if test="${resultMap.dlvyGroup.returnDlvyApplcAt2 ne 'Y'}"> disabled="disabled" </c:if> >
|
||||
${curUnit}
|
||||
</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -306,8 +306,16 @@
|
||||
event.preventDefault(); // 체크박스 상태 변경 방지
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
.refund-clause {
|
||||
border: 1px solid #e9ecef;
|
||||
padding: clamp(12px, 3%, 18px);
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<%--시큐리티정보가져오기--%>
|
||||
<c:set value = "${resultMap.clauseList}" var = "clauseList"/>
|
||||
<c:set value = "${resultMap.regusrInfo}" var = "regusrInfo"/>
|
||||
<c:set value = "${resultMap.bbscttVO}" var = "bbscttVO"/>
|
||||
<c:set value = "${resultMap.bbsInfo}" var = "bbsInfo"/>
|
||||
@@ -335,6 +343,11 @@
|
||||
</c:choose>
|
||||
<div class="table-wrapper">
|
||||
<form id="bbsRegForm">
|
||||
<div class="refund-clause ck-content">
|
||||
<c:out value="${clauseList[0].stplatNm}" escapeXml="false"/>
|
||||
<br><br>
|
||||
<c:out value="${clauseList[0].stplatCn}" escapeXml="false"/>
|
||||
</div>
|
||||
<table class="table write">
|
||||
<caption>게시글 등록</caption>
|
||||
<colgroup>
|
||||
|
||||
@@ -265,7 +265,15 @@
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
.refund-clause {
|
||||
border: 1px solid #e9ecef;
|
||||
padding: clamp(12px, 3%, 18px);
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<c:set value="${resultMap.clauseList}" var="clauseList"/>
|
||||
<c:set value="${resultMap.regusrInfo}" var="regusrInfo"/>
|
||||
<c:set value="${resultMap.bbscttVO}" var="bbscttVO"/>
|
||||
<c:set value="${resultMap.bbsInfo}" var="bbsInfo"/>
|
||||
@@ -284,6 +292,11 @@
|
||||
<div class="table-wrapper">
|
||||
<form id="bbsRegForm">
|
||||
<input type='hidden' name='bbsTyCd' id='bbsTyCd' value='<c:out value="${bbsInfo.bbsTyCd}"/>'>
|
||||
<div class="refund-clause ck-content">
|
||||
<c:out value="${clauseList[0].stplatNm}" escapeXml="false"/>
|
||||
<br><br>
|
||||
<c:out value="${clauseList[0].stplatCn}" escapeXml="false"/>
|
||||
</div>
|
||||
<table class="table write">
|
||||
<caption>게시글 등록</caption>
|
||||
<colgroup>
|
||||
|
||||
@@ -15,107 +15,163 @@
|
||||
<html lang="ko">
|
||||
|
||||
<head>
|
||||
<jsp:include page="/WEB-INF/views/comm/Include.jsp"/>
|
||||
<jsp:include page="/WEB-INF/views/comm/Include.jsp"/>
|
||||
<spring:eval expression="@environment.getProperty('currency-unit.default')" var="curUnit"/>
|
||||
</head>
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
var subsvcInnb = $('#subsvcInnb').val();
|
||||
fn_select_subsvcDetail(subsvcInnb);
|
||||
});
|
||||
|
||||
/******************************************************
|
||||
* 구독서비스 상세 조회
|
||||
* ****************************************************/
|
||||
const fn_select_subsvcDetail = function(subsvcInnb) {
|
||||
var curUnit = '${curUnit}';
|
||||
|
||||
$.ajax({
|
||||
type: "post",
|
||||
url : '<c:url value="/sopmal/main/selectSubscribeDetail"/>',
|
||||
data : {
|
||||
subsvcInnb : subsvcInnb
|
||||
},
|
||||
success: function (data) {
|
||||
data = JSON.parse(data.resBody.result);
|
||||
data = data.resultMap;
|
||||
|
||||
$('#subPd').text(data.subPd);
|
||||
$('#dlvyCnt').text(data.dlvyCnt);
|
||||
$('#dlvyCycle').text(data.dlvyCycle);
|
||||
$('#cnsmrpric').text(fn_format_number(data.cnsmrpric) + curUnit);
|
||||
$('#selpric').text(fn_format_number(data.selpric) + curUnit);
|
||||
$('#dscntRaito').text(data.dscntRaito + '%');
|
||||
$('#subsvcDc').html(data.subsvcDc);
|
||||
|
||||
switch (data.subsvcSttusCd) {
|
||||
case '01':
|
||||
$('#subscribeBtn').text('구독하기');
|
||||
$('#subscribeBtn').prop('disabled', false);
|
||||
break;
|
||||
case '02':
|
||||
case '03':
|
||||
$('#subscribeBtn').text(data.subsvcSttus);
|
||||
$('#subscribeBtn').prop('disabled', true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const fn_format_number = function(number) {
|
||||
return Number(number).toLocaleString();
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
.container {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
height: 200px;
|
||||
border: 1px solid #e9ecef;
|
||||
}
|
||||
.container {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
border: 1px solid #e9ecef;
|
||||
margin-top: 50px;
|
||||
margin-bottom: 50px;
|
||||
}
|
||||
|
||||
.box {
|
||||
flex: 1;
|
||||
flex-direction: column;
|
||||
border-right: 1px solid #e9ecef;
|
||||
display: flex;
|
||||
padding: 32px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.box {
|
||||
flex: 1;
|
||||
flex-direction: column;
|
||||
border-right: 1px solid #e9ecef;
|
||||
display: flex;
|
||||
padding: 32px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.box:last-child {
|
||||
display: flex;
|
||||
border-right: none;
|
||||
justify-content: center;
|
||||
}
|
||||
.box:last-child {
|
||||
display: flex;
|
||||
border-right: none;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.box > span {
|
||||
width: 100%;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
.box > .boxTitle {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.box ul {
|
||||
padding-left: 20px;
|
||||
margin: 0;
|
||||
}
|
||||
.box ul {
|
||||
padding-left: 20px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.box ul li {
|
||||
list-style-type: disc;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
.box ul li {
|
||||
list-style-type: disc;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.box button {
|
||||
background-color: #000;
|
||||
color: #fff;
|
||||
border: none;
|
||||
padding: 12px 24px;
|
||||
border-radius: 6px;
|
||||
cursor: pointer;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.box button:hover {
|
||||
opacity: 0.85;
|
||||
}
|
||||
#subsvcDc {
|
||||
border: 1px solid #e9ecef;
|
||||
padding: clamp(12px, 3%, 18px);
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<%-- 공통 Header --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Header.jsp"/>
|
||||
<spring:eval expression="@environment.getProperty('currency-unit.default')" var="curUnit"/>
|
||||
<!-- 메인 컨텐츠 영역 -->
|
||||
<main>
|
||||
<div class="sub-wrapper">
|
||||
<div class="sub-content">
|
||||
<form>
|
||||
<h2 class="subList__title">구독 서비스</h2>
|
||||
<div class="container">
|
||||
<div class="box">
|
||||
<span>구독서비스</span>
|
||||
<div class="select-box">
|
||||
<select class="" title="">
|
||||
<option value="" selected>구독서비스 안내</option>
|
||||
<option value="">구독서비스 준비중</option>
|
||||
<option value="">프리미엄 구독 (잔여 : 100)</option>
|
||||
<option value="">Top10 선정 (잔여 : 10)</option>
|
||||
<option value="">Top100 선정 (잔여 : 100)</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box">
|
||||
<span>구독서비스 내역</span>
|
||||
<ul>
|
||||
<li>구독기간 : 12개월</li>
|
||||
<li>배송횟수 : 12회</li>
|
||||
<li>배송주기 : 매달 1회</li>
|
||||
<li>상품금액 : 99,000${curUnit} <span style="color: red">58%</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="box">
|
||||
<button>구독하기</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sub-wrapper">
|
||||
<div class="sub-content">
|
||||
<form>
|
||||
<h2 class="subList__title">구독 서비스</h2>
|
||||
<div class="ck-content" style="border: 1px solid #e9ecef">
|
||||
<c:out value="${ resultMap.sopmalInfo[0].subsvcGuidanceWords }" escapeXml="false"/>
|
||||
</div>
|
||||
<c:choose>
|
||||
<c:when test="${not empty resultMap.subsvcList}">
|
||||
<div class="container">
|
||||
<div class="box">
|
||||
<div class="boxTitle">
|
||||
<span>구독서비스</span>
|
||||
</div>
|
||||
<div class="select-box">
|
||||
<select title="구독 서비스 선택" id="subsvcInnb" name="subsvcInnb" onchange="fn_select_subsvcDetail(this.value);">
|
||||
<c:forEach var="subsvcList" items="${resultMap.subsvcList}" varStatus="status">
|
||||
<option value="${subsvcList.subsvcInnb}" <c:if test="${status.first}">selected</c:if>>${subsvcList.subsvcConcatNm}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box">
|
||||
<ul>
|
||||
<li>
|
||||
구독기간 : <span id="subPd"></span>개월
|
||||
</li>
|
||||
<li>
|
||||
배송횟수 : <span id="dlvyCnt"></span>회
|
||||
</li>
|
||||
<li>
|
||||
배송주기 : <span id="dlvyCycle"></span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="box">
|
||||
<div class="productDetailInfo__price__price boxTitle">
|
||||
<span id="cnsmrpric" class="product-unit-price__original"></span>
|
||||
<span id="selpric" class="product-unit-price__current"></span>
|
||||
<span id="dscntRaito" style="color: red">%</span>
|
||||
</div>
|
||||
<button id="subscribeBtn" class="btn theme large">구독하기</button>
|
||||
</div>
|
||||
</div>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<span style="display: block; width: 100%; text-align: center; font-size: 32px;">구독 서비스 상품 준비중</span>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
|
||||
<div class="ck-content">
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div id="subsvcDc" class="ck-content">구독 서비스 상품 설명</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<jsp:include page="/WEB-INF/views/comm/Footer.jsp"/>
|
||||
|
||||
@@ -899,7 +899,7 @@
|
||||
<jsp:include page="/WEB-INF/views/comm/mpage/MypageRight.jsp"/>
|
||||
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
|
||||
<spring:eval expression="@environment.getProperty('currency-unit.default')" var="curUnit"/>
|
||||
|
||||
<%--
|
||||
<div class="sub-right-content__section">
|
||||
<h3 class="sub-right-content__innerTitle">주문/배송 조회 <span
|
||||
class="sub-right-content__innerTitle__sub">(최근 1개월)</span></h3>
|
||||
@@ -921,7 +921,7 @@
|
||||
</div>
|
||||
<a class="sub-right-content__more" href="/sopmal/mpage/ordr/selectMbrOrdrListInqire">전체보기</a>
|
||||
</div>
|
||||
|
||||
--%>
|
||||
|
||||
<div class="sub-right-content__section">
|
||||
<h3 class="sub-right-content__innerTitle">최근 주문</h3>
|
||||
|
||||
@@ -89,6 +89,9 @@
|
||||
<input type="hidden" name="lnbAdres" class = "lnbAdres"value="<c:out value='${resultMap.lnbAdres}'/>" />
|
||||
<input type="hidden" name="recpntNm" class = "recpntNmR" value="<c:out value='${resultMap.recpntNm}'/>" />
|
||||
<input type="hidden" name="dtlAdres" class = "dtlAdres" value="<c:out value='${resultMap.dtlAdres}'/>" />
|
||||
<input type="hidden" name="dlvylcAreaCd" class="dlvylcAreaCd" value="<c:out value='${resultMap.dlvylcAreaCd}'/>" />
|
||||
<input type="hidden" name="prefcd" class="prefcd" value="<c:out value='${resultMap.prefcd}'/>" />
|
||||
<input type="hidden" name="cstmclerCd" class="cstmclerCd" value="<c:out value='${resultMap.cstmclerCd}'/>" />
|
||||
<input type="hidden" name="mbtlnb" class = "mbtlnb" value="<c:out value='${resultMap.mbtlnb}' />" />
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
|
||||
@@ -16,64 +16,101 @@
|
||||
2024-04-15 김혜인 최초 생성
|
||||
--%>
|
||||
<html>
|
||||
<!-- 배송지 등록-->
|
||||
<div id="dlvylcRegist" class="modal default" style="max-width: 600px;">
|
||||
<!-- 배송지 등록-->
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
$('#postcodeAlert').hide();
|
||||
dlvylcFormPreValues = {};
|
||||
|
||||
$('[name=dlvylcAreaCd]').on('change', fn_toggle_langHeader)
|
||||
.on('change', fn_clear_dlvylcForm);
|
||||
fn_toggle_langHeader();
|
||||
|
||||
/*ENTER 키 입력 시 submit 방지*/
|
||||
$('#dlvylcRegistForm').on('keydown', function(e) {
|
||||
if (e.keyCode == 13) {
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<div id="dlvylcRegist" class="modal default" style="max-width: 600px;">
|
||||
<form id = "dlvylcRegistForm">
|
||||
<div class="modal-header">
|
||||
<div class="modal-header__title">배송지 등록</div>
|
||||
</div>
|
||||
<form id = "dlvylcRegistForm">
|
||||
<div class="modal-content">
|
||||
<table class="table-address">
|
||||
<caption>해당 테이블에 대한 내용</caption>
|
||||
<colgroup>
|
||||
<col style="width:116px;">
|
||||
<col style="width:auto;">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>배송지명<span class="required-asterisk">*</span></th>
|
||||
<td>
|
||||
<input type="text" class="m-input" name="dlvylcDcCn" title="배송지명" maxlength="67">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>받으시는 분<span class="required-asterisk">*</span></th>
|
||||
<td>
|
||||
<input type="text" class="m-input" title="받으시는 분" name="recpntNm" title="받으시는 분" maxlength="13">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>배송지 주소<span class="required-asterisk">*</span></th>
|
||||
<td>
|
||||
<input type="text" class="m-input short" id="zip" name="zip" title="우편번호" maxlength="5" readonly>
|
||||
<button class="find-address-btn" onclick="fn_select_postcode(fn_select_dlvylc_postcode); return false;">우편번호 찾기</button>
|
||||
<input type="text" class="m-input long my" id="adres" name="adres" maxlength="66" readonly title="주소">
|
||||
<input type="text" class="m-input long" id="dtlAdres" name="dtlAdres" title="상세주소" maxlength="66" placeholder="나머지 주소를 입력해 주세요">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>휴대전화번호<span class="required-asterisk">*</span></th>
|
||||
<td>
|
||||
<input name="mbtlnb" type="text" class="m-input telno" title="휴대전화번호" maxlength="13" placeholder="휴대폰번호'-'없이 입력하세요">
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="shipping-register-bottom">
|
||||
<label class="b-checkbox checkbox is-medium">
|
||||
<input type="checkbox" id="dftDlvylcAt" name="dftDlvylcAt" value="Y">
|
||||
<span class="check"></span>
|
||||
<span class="control-label">기본 배송지</span>
|
||||
</label>
|
||||
<div class="modal-content">
|
||||
<div class="custom-radio-container">
|
||||
<div class="custom-radio">
|
||||
<input type="radio" id="langKr" name="dlvylcAreaCd" value="KR" checked>
|
||||
<label for="langKr">KR</label>
|
||||
</div>
|
||||
<div class="shipping-btn-container">
|
||||
<a href="#" rel="modal:close" class="btn large outline">취소</a>
|
||||
<button type="button" id="DlvylcRegistBtn" class="btn theme large"
|
||||
onclick="fn_insert_dlvylc('<spring:message code='success.common.insert'/>'); return false;">등록하기</button>
|
||||
<div class="custom-radio">
|
||||
<input type="radio" id="langJp" name="dlvylcAreaCd" value="JP">
|
||||
<label for="langJp">JP</label>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" id="adresDv" name="adresDv">
|
||||
<input type="hidden" id="isPop">
|
||||
</form>
|
||||
</div>
|
||||
<table class="table-address" id="dlvylcFormTable">
|
||||
<caption>해당 테이블에 대한 내용</caption>
|
||||
<colgroup>
|
||||
<col style="width:116px;">
|
||||
<col style="width:auto;">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>배송지명<span class="required-asterisk">*</span></th>
|
||||
<td>
|
||||
<input type="text" class="m-input" name="dlvylcDcCn" title="배송지명" maxlength="67">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>받으시는 분<span class="required-asterisk">*</span></th>
|
||||
<td>
|
||||
<input type="text" class="m-input" title="받으시는 분" name="recpntNm" title="받으시는 분" maxlength="13">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>배송지 주소<span class="required-asterisk">*</span></th>
|
||||
<td>
|
||||
<input type="text" class="m-input short" id="zip" name="zip" title="우편번호" maxlength="7" readonly>
|
||||
<button class="find-address-btn langKr" onclick="fn_select_postcode(fn_select_dlvylc_postcode); return false;">우편번호 찾기</button>
|
||||
<button class="find-address-btn langJp" onclick="fn_select_postcodeJp(); return false;">주소 찾기</button>
|
||||
<p class="signUp__inputBox__alertText" id="postcodeAlert">우편번호를 정확하게 입력해 주세요.</p>
|
||||
<input type="text" class="m-input long my" id="adres" name="adres" maxlength="66" readonly title="주소">
|
||||
<input type="text" class="m-input long" id="dtlAdres" name="dtlAdres" title="상세주소" maxlength="66" placeholder="나머지 주소를 입력해 주세요">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>휴대전화번호<span class="required-asterisk">*</span></th>
|
||||
<td>
|
||||
<input id="mbtlnb" name="mbtlnb" type="text" class="m-input telno" title="휴대전화번호" maxlength="13" placeholder="휴대폰번호'-'없이 입력하세요">
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="langKr">
|
||||
<th>개인통관번호<br>(개인통관부호)<span class="required-asterisk">*</span></th>
|
||||
<td>
|
||||
<input type="text" class="m-input" id="cstmclerCd" name="cstmclerCd" title="개인통관번호(개인통관부호)" maxlength="13" placeholder="P로 시작하는 13자리 부호를 입력하세요">
|
||||
<button class="find-address-btn" onclick="window.open('https://unipass.customs.go.kr/per/persIndex.do', '_blank'); return false;">통관번호 조회</button>
|
||||
<input type="hidden" class="m-input" id="prefcode" name="prefcd">
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="shipping-register-bottom">
|
||||
<label class="b-checkbox checkbox is-medium">
|
||||
<input type="checkbox" id="dftDlvylcAt" name="dftDlvylcAt" value="Y">
|
||||
<span class="check"></span>
|
||||
<span class="control-label">기본 배송지</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="shipping-btn-container">
|
||||
<a href="#" rel="modal:close" class="btn large outline">취소</a>
|
||||
<button type="button" class="btn theme large"
|
||||
onclick="fn_insert_dlvylc('<spring:message code='success.common.insert'/>'); return false;">등록하기</button>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" id="adresDv" name="adresDv">
|
||||
<input type="hidden" id="isPop">
|
||||
</form>
|
||||
</div>
|
||||
</html>
|
||||
@@ -18,7 +18,20 @@
|
||||
<html>
|
||||
<script>
|
||||
$(document).ready(function (){
|
||||
$(".telno").val(fn_format_mbtlnb($(".telno").val()));
|
||||
$("#mbtlnb").val(fn_format_mbtlnb($("#mbtlnb").val()));
|
||||
$('#postcodeAlert').hide();
|
||||
dlvylcFormPreValues = {};
|
||||
|
||||
$('[name=dlvylcAreaCd]').on('change', fn_toggle_langHeader)
|
||||
.on('change', fn_clear_dlvylcForm);
|
||||
fn_toggle_langHeader();
|
||||
|
||||
/*ENTER 키 입력 시 submit 방지*/
|
||||
$('#dlvylcRegistForm').on('keydown', function(e) {
|
||||
if (e.keyCode == 13) {
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<div id="dlvylcUpdate" class="modal default" style="max-width: 600px;">
|
||||
@@ -27,7 +40,17 @@
|
||||
<div class="modal-header__title">배송지 수정</div>
|
||||
</div>
|
||||
<div class="modal-content">
|
||||
<table class="table-address">
|
||||
<div class="custom-radio-container">
|
||||
<div class="custom-radio">
|
||||
<input type="radio" id="langKr" name="dlvylcAreaCd" value="KR" <c:if test="${'KR' eq dtlDlvylc.resultVO.dlvylcAreaCd}">checked</c:if>>
|
||||
<label for="langKr">KR</label>
|
||||
</div>
|
||||
<div class="custom-radio">
|
||||
<input type="radio" id="langJp" name="dlvylcAreaCd" value="JP" <c:if test="${'JP' eq dtlDlvylc.resultVO.dlvylcAreaCd}">checked</c:if>>
|
||||
<label for="langJp">JP</label>
|
||||
</div>
|
||||
</div>
|
||||
<table class="table-address" id="dlvylcFormTable">
|
||||
<caption>해당 테이블에 대한 내용</caption>
|
||||
<colgroup>
|
||||
<col style="width:116px;">
|
||||
@@ -49,8 +72,10 @@
|
||||
<tr>
|
||||
<th>배송지 주소<span class="required-asterisk">*</span></th>
|
||||
<td>
|
||||
<input type="text" class="m-input short" id="zip" name="zip" title="우편번호" value="<c:out value = "${dtlDlvylc.resultVO.zip}"/>" maxlength="5" readonly>
|
||||
<button class="find-address-btn" onclick="fn_select_postcode(fn_select_dlvylc_postcode); return false;">우편번호 찾기</button>
|
||||
<input type="text" class="m-input short" id="zip" name="zip" title="우편번호" value="<c:out value = "${dtlDlvylc.resultVO.zip}"/>" maxlength="7" readonly>
|
||||
<button class="find-address-btn langKr" onclick="fn_select_postcode(fn_select_dlvylc_postcode); return false;">우편번호 찾기</button>
|
||||
<button class="find-address-btn langJp" onclick="fn_select_postcodeJp(); return false;">주소 찾기</button>
|
||||
<p class="signUp__inputBox__alertText" id="postcodeAlert">우편번호를 정확하게 입력해 주세요.</p>
|
||||
<input type="text" class="m-input long my" id="adres" name="adres" title="주소" maxlength="66"
|
||||
value=<c:choose>
|
||||
<c:when test = "${dtlDlvylc.resultVO.adresDv eq '01'}">'<c:out value = "${dtlDlvylc.resultVO.rnmAdres}"/>'</c:when>
|
||||
@@ -63,10 +88,19 @@
|
||||
<tr>
|
||||
<th>휴대전화번호<span class="required-asterisk">*</span></th>
|
||||
<td>
|
||||
<input name="mbtlnb" type="text" class="m-input telno" title="휴대전화번호" value="<c:out value = "${dtlDlvylc.resultVO.mbtlnb}"/>"
|
||||
<input id="mbtlnb" name="mbtlnb" type="text" class="m-input telno" title="휴대전화번호" value="<c:out value = "${dtlDlvylc.resultVO.mbtlnb}"/>"
|
||||
maxlength="13" placeholder="휴대폰번호'-'없이 입력하세요">
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="langKr">
|
||||
<th>개인통관번호<br>(개인통관부호)<span class="required-asterisk">*</span></th>
|
||||
<td>
|
||||
<input type="text" class="m-input" id="cstmclerCd" name="cstmclerCd" title="개인통관번호(개인통관부호)" value="<c:out value = "${dtlDlvylc.resultVO.cstmclerCd}"/>"
|
||||
maxlength="13" placeholder="P로 시작하는 13자리 부호를 입력하세요">
|
||||
<button class="find-address-btn" onclick="window.open('https://unipass.customs.go.kr/per/persIndex.do', '_blank'); return false;">통관번호 조회</button>
|
||||
<input type="hidden" class="m-input" id="prefcode" name="prefcd" value="<c:out value = '${dtlDlvylc.resultVO.prefcd}'/>">
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="shipping-register-bottom">
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
<span class="orderList__price"><span class="comma"><fmt:formatNumber value="${order.setleAmt}" pattern="#,###"/></span>${curUnit}</span>
|
||||
</div>
|
||||
<div class="orderList__description__third">
|
||||
<span class="orderList__mileage"><span class="comma">예상적립 <fmt:formatNumber value="${order.mlgAmt}" pattern="#,###"/></span>${curUnit}</span>
|
||||
<span class="orderList__mileage"><span class="comma">예상적립 <fmt:formatNumber value="${order.mlgAmt}" pattern="#,###"/></span>점</span>
|
||||
</div>
|
||||
<div class="orderList__description__fourth">
|
||||
<c:choose>
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
</div>
|
||||
<div class="orderList__description__third">
|
||||
<c:if test = "${!(order.ordrSttusCd > 84 && order.ordrSttusCd < 100)}">
|
||||
<span class="orderList__mileage"><span class="comma">예상적립 <fmt:formatNumber value="${order.mlgAmt}" pattern="#,###"/></span>${curUnit}</span>
|
||||
<span class="orderList__mileage"><span class="comma">예상적립 <fmt:formatNumber value="${order.mlgAmt}" pattern="#,###"/></span>점</span>
|
||||
</c:if>
|
||||
</div>
|
||||
<div class="orderList__description__fourth">
|
||||
|
||||
@@ -1280,7 +1280,7 @@
|
||||
<c:out value="${order.sopmalOrdrSttusNm}"/>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<c:out value="${goods.ordrSttusNm}"/><c:if test = "${goods.purchsDcsnAt eq 'Y'}">(구매확정)</c:if>
|
||||
<c:out value="${goods.ordrSttusNm}"/><c:if test = "${goods.purchsDcsnAt eq 'Y'}"><br>(구매확정)</c:if>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</a>
|
||||
@@ -1308,9 +1308,7 @@
|
||||
</c:when>
|
||||
<c:when test="${goods.ordrSttusCd > 54 && goods.ordrSttusCd < 76 && order.sknEnvrnCd ne 'POS'}">
|
||||
<a href="javascript:void(0);" onclick="fn_call_dlvy_sweettracker_pop('<c:out value="${order.ordrInnb}"/>');" id="inqireDlvy" class="btn-ordr-sttus btn outline sm full">배송조회</a>
|
||||
<c:if test="${ goods.purchsDcsnAt eq 'N' }">
|
||||
<a href="javascript:void(0);" id="reqstRefund" class="btn-ordr-sttus btn gray sm full" onclick="fn_pop_m2mqna_regist('<c:out value="${order.ordrInnb}"/>');">반품신청</a>
|
||||
</c:if>
|
||||
<a href="javascript:void(0);" id="reqstRefund" class="btn-ordr-sttus btn gray sm full" onclick="fn_pop_m2mqna_regist('<c:out value="${order.ordrInnb}"/>');">반품신청</a>
|
||||
<c:choose>
|
||||
<c:when test="${goods.itemOrdrSttusCd > 54 && goods.itemOrdrSttusCd < 76 && goods.purchsDcsnAt eq 'N'}">
|
||||
<a href="javascript:void(0);" onclick="fn_post_purchs_dcsn_by_item('<c:out value="${goods.sopmalCd}"/>',
|
||||
@@ -1434,7 +1432,7 @@
|
||||
<c:out value="${order.sopmalOrdrSttusNm}"/>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<c:out value="${goods.ordrSttusNm}"/><c:if test = "${goods.purchsDcsnAt eq 'Y'}">(구매확정)</c:if>
|
||||
<c:out value="${goods.ordrSttusNm}"/><c:if test = "${goods.purchsDcsnAt eq 'Y'}"><br>(구매확정)</c:if>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</a>
|
||||
@@ -1462,9 +1460,7 @@
|
||||
</c:when>
|
||||
<c:when test="${goods.ordrSttusCd > 54 && goods.ordrSttusCd < 76 && order.sknEnvrnCd ne 'POS'}">
|
||||
<a href="javascript:void(0);" onclick="fn_call_dlvy_sweettracker_pop('<c:out value="${order.ordrInnb}"/>');" id="inqireDlvy" class="btn-ordr-sttus btn outline sm full">배송조회</a>
|
||||
<c:if test="${ goods.purchsDcsnAt eq 'N' }">
|
||||
<a href="javascript:void(0);" id="reqstRefund" class="btn-ordr-sttus btn gray sm full" onclick="fn_pop_m2mqna_regist('<c:out value="${order.ordrInnb}"/>');">반품신청</a>
|
||||
</c:if>
|
||||
<a href="javascript:void(0);" id="reqstRefund" class="btn-ordr-sttus btn gray sm full" onclick="fn_pop_m2mqna_regist('<c:out value="${order.ordrInnb}"/>');">반품신청</a>
|
||||
<c:choose>
|
||||
<c:when test="${goods.itemOrdrSttusCd > 54 && goods.itemOrdrSttusCd < 76 && goods.purchsDcsnAt eq 'N'}">
|
||||
<a href="javascript:void(0);" onclick="fn_post_purchs_dcsn_by_item('<c:out value="${goods.sopmalCd}"/>',
|
||||
|
||||
@@ -164,6 +164,7 @@
|
||||
<div class="sub-content">
|
||||
<div class="sub-rl">
|
||||
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
|
||||
<spring:eval expression="@environment.getProperty('currency-unit.default')" var="curUnit"/>
|
||||
<%-- 마이페이지 Left 영역 --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/mpage/MypageLeft.jsp"/>
|
||||
<div class="sub-right-content">
|
||||
@@ -255,20 +256,20 @@
|
||||
<td>
|
||||
<span class="cartItem__normalPrice"><span
|
||||
class=" comma"><c:out value="${ refundList.slepric }"/></span><span
|
||||
class="priceUnit">원</span>
|
||||
class="priceUnit">${curUnit}</span>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="cartItem__discountPrice"><span
|
||||
class="cartItem__discountMinus">(-)</span><span
|
||||
class="comma"><c:out value="${ refundList.dscntAmt }"/></span><span
|
||||
class="priceUnit">원</span>
|
||||
class="priceUnit">${curUnit}</span>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="cartItem__afterPrice"><span
|
||||
class="comma"><c:out value="${ refundList.applyDscntAmt }"/></span>
|
||||
<span class="priceUnit">원</span>
|
||||
<span class="priceUnit">${curUnit}</span>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
@@ -320,7 +321,7 @@
|
||||
<td>
|
||||
<span class="cartItem__shippingFee"><span
|
||||
class=" comma">3,000</span><span
|
||||
class="priceUnit">원</span>
|
||||
class="priceUnit">${curUnit}</span>
|
||||
</span>
|
||||
</td>
|
||||
--%>
|
||||
@@ -753,7 +754,7 @@
|
||||
<span class="priceSum__itemTitle"><c:out value="${ reTotAmt.setleTyCdNm }"/></span>
|
||||
<span class="priceSum__itemPrice">
|
||||
<span class="comma priceSum__itemNum"><c:out value="${ reTotAmt.refundAmtQySum }"/></span>
|
||||
<span class="priceUnit">원</span>
|
||||
<span class="priceUnit">${curUnit}</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="priceSum__operator">
|
||||
@@ -775,7 +776,7 @@
|
||||
<span class="priceSum__itemTitle">마일리지</span>
|
||||
<span class="priceSum__itemPrice">
|
||||
<span class="comma priceSum__itemNum"><c:out value="${ reTotAmt.totRefundMlgAmt }"/></span>
|
||||
<span class="priceUnit">원</span>
|
||||
<span class="priceUnit">점</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 마이너스 -->
|
||||
@@ -804,7 +805,7 @@
|
||||
<span class="priceSum__itemTitle">쿠폰</span>
|
||||
<span class="priceSum__itemPrice">
|
||||
<span class="comma priceSum__itemNum"><c:out value="${ reTotAmt.totRefundCouponAmt }"/></span>
|
||||
<span class="priceUnit">원</span>
|
||||
<span class="priceUnit">${curUnit}</span>
|
||||
</span>
|
||||
</div>
|
||||
<c:if test="${ reTotAmt.rlDlvyAmtRefundAmt > 0}">
|
||||
@@ -818,7 +819,7 @@
|
||||
<span class="priceSum__itemTitle">반품배송비</span>
|
||||
<span class="priceSum__itemPrice">
|
||||
<span class="comma priceSum__itemNum"><c:out value="${ reTotAmt.rlDlvyAmtRefundAmt }"/></span>
|
||||
<span class="priceUnit">원</span>
|
||||
<span class="priceUnit">${curUnit}</span>
|
||||
</span>
|
||||
</div>
|
||||
</c:if>
|
||||
@@ -842,7 +843,7 @@
|
||||
<span class="priceSum__itemTitle">환불배송비</span>
|
||||
<span class="priceSum__itemPrice">
|
||||
<span class="comma priceSum__itemNum"><c:out value="${ reTotAmt.totReturnDlvyAmt }"/></span>
|
||||
<span class="priceUnit">원</span>
|
||||
<span class="priceUnit">${curUnit}</span>
|
||||
</span>
|
||||
</div>
|
||||
</c:if>
|
||||
@@ -857,10 +858,10 @@
|
||||
<span class="priceSum__totalTitle">환불 금액</span>
|
||||
<div class="priceSum__totalPrice">
|
||||
<span class="comma"><c:out value="${ reTotAmt.rlRefundAmt }"/></span>
|
||||
<span class="priceUnit">원</span>
|
||||
<span class="priceUnit">${curUnit}</span>
|
||||
</div>
|
||||
<div class="priceSum__totalDetail">
|
||||
(상품금액 <span class="comma"><c:out value="${ reTotAmt.refundAmtQySum }"/></span>원 + 배송비 <span class="comma"><c:out value="${ reTotAmt.rlDlvyAmt }"/></span>원)
|
||||
(상품금액 <span class="comma"><c:out value="${ reTotAmt.refundAmtQySum }"/></span>${curUnit} + 배송비 <span class="comma"><c:out value="${ reTotAmt.rlDlvyAmt }"/></span>${curUnit})
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
--%>
|
||||
<a href="<c:url value="/sopmal/goods/selectGoodsDtl?sopmalCd=${refundList.sopmalCd}&goodsInnb=${refundList.goodsInnb}"/>" class="orderList__image">
|
||||
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
|
||||
<spring:eval expression="@environment.getProperty('currency-unit.default')" var="curUnit"/>
|
||||
<img src="<c:out value="${ cdnurl }${ refundList.img }"/>" onerror="this.src='/pc/images/image_placeholder.png'" alt="<c:out value="${refundList.goodsNm}"/>">
|
||||
</a>
|
||||
<div class="orderList__description">
|
||||
@@ -49,7 +50,7 @@
|
||||
</div>
|
||||
<div class="orderList__description__second">
|
||||
<span class="orderList__price">
|
||||
<span class="comma"><c:out value="${ refundList.refundAmt }"/></span>원
|
||||
<span class="comma"><c:out value="${ refundList.refundAmt }"/></span>${curUnit}
|
||||
</span>
|
||||
</div>
|
||||
<div class="orderList__description__third">
|
||||
|
||||
@@ -0,0 +1,122 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
|
||||
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui"%>
|
||||
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
|
||||
<spring:eval expression="@environment.getProperty('currency-unit.default')" var="curUnit"/>
|
||||
|
||||
<c:choose>
|
||||
<c:when test="${not empty data.resultList}">
|
||||
<c:forEach var="order" items="${data.resultList}">
|
||||
<div class="orderList__item">
|
||||
<div class="orderList__item__inner">
|
||||
<a href="<c:url value="/sopmal/goods/selectGoodsDtl?sopmalCd=${order.sopmalCd}&goodsInnb=${order.goodsInnb}"/>" class="orderList__image">
|
||||
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
|
||||
<img src="<c:out value="${ cdnurl }${order.goodsImageUrl}"/>" onerror="this.src='/pc/images/image_placeholder.png'" alt="<c:out value="${order.goodsNm}"/>">
|
||||
</a>
|
||||
<div class="orderList__description">
|
||||
<div class="orderList__description__first">
|
||||
<div class="orderList__item__top">
|
||||
<a href="javascript:void(0);" onclick="fn_go_subsvc_dtl('<c:out value="${order.sopmalCd}"/>', '<c:out value="${order.ordrInnb}"/>');" class="orderList__orderNum"><c:out value="${order.ordrInnb}"/></a>
|
||||
<span class="orderList__dot">·</span>
|
||||
<span class="orderList__date"><c:out value="${order.ordrDt}"/> <span class="orderList__dot">·</span> ${order.ordrTyCdNm}</span>
|
||||
</div>
|
||||
<a href="javascript:void(0);" onclick="fn_go_subsvc_dtl('<c:out value="${order.sopmalCd}"/>', '<c:out value="${order.ordrInnb}"/>');" class="orderList__productTitle"><c:out value="${order.goodsNm}"/></a>
|
||||
<%--<span class="orderList__option"><c:out value="${order.optnNm}"/></span>--%>
|
||||
<span class="cartItem__productOption"><span class="option-badge">옵션</span> <c:out value="${order.optnNm}"/></span>
|
||||
<c:if test="${not empty order.inputOptnText}">
|
||||
<span class="orderList__option"><c:out value="${order.inputOptnText}"/></span>
|
||||
</c:if>
|
||||
</div>
|
||||
<div class="orderList__description__second">
|
||||
<span class="orderList__price"><span class="comma"><fmt:formatNumber value="${order.setleAmt}" pattern="#,###"/></span>${curUnit}</span>
|
||||
</div>
|
||||
<div class="orderList__description__third">
|
||||
<c:if test = "${!(order.ordrSttusCd > 84 && order.ordrSttusCd < 100)}">
|
||||
<span class="orderList__mileage"><span class="comma">예상적립 <fmt:formatNumber value="${order.mlgAmt}" pattern="#,###"/></span>점</span>
|
||||
</c:if>
|
||||
</div>
|
||||
<div class="orderList__description__fourth">
|
||||
<c:choose>
|
||||
<c:when test="${order.ordrSttusCd > 14 && order.ordrSttusCd < 36}">
|
||||
<span class="orderList__status"><c:out value="${order.ordrSttusNm}"/></span>
|
||||
</c:when>
|
||||
<c:when test="${order.ordrSttusCd > 39 && order.ordrSttusCd < 71}">
|
||||
<span class="orderList__status delivery"><c:out value="${order.ordrSttusNm}"/></span>
|
||||
</c:when>
|
||||
<c:when test="${order.ordrSttusCd == 75}">
|
||||
<span class="orderList__status complete"><c:out value="${order.ordrSttusNm}"/></span>
|
||||
</c:when>
|
||||
</c:choose>
|
||||
<c:if test="${ order.ordrTyCd == '04'}">
|
||||
<br/>
|
||||
<c:choose>
|
||||
<c:when test="${order.giftSttusCd == '01' }">
|
||||
<span class="orderList__status">(<c:out value="${order.giftSttusCdNm}"/>)</span>
|
||||
</c:when>
|
||||
<c:when test="${order.giftSttusCd == '02' }">
|
||||
<span class="orderList__status delivery">(<c:out value="${order.giftSttusCdNm}"/>)</span>
|
||||
</c:when>
|
||||
<c:when test="${order.giftSttusCd == '03' }">
|
||||
<span class="orderList__status cancel">(<c:out value="${order.giftSttusCdNm}"/>)</span>
|
||||
</c:when>
|
||||
<c:when test="${order.giftSttusCd == '04' }">
|
||||
<span class="orderList__status cancel">(<c:out value="${order.giftSttusCdNm}"/>)</span>
|
||||
</c:when>
|
||||
</c:choose>
|
||||
</c:if>
|
||||
</div>
|
||||
<%-- <div class="orderList__btnControls">--%>
|
||||
<%-- <c:choose>--%>
|
||||
<%-- <c:when test="${order.ordrSttusCd == 15}">--%>
|
||||
<%-- <a href="javascript:void(0);" onclick="fn_post_cancl_ordr('<c:out value="${order.sopmalCd}"/>', '<c:out value="${order.ordrInnb}"/>', '<c:out value="${order.ordrSttusCd}"/>');" class="btn-ordr-sttus btn gray sm full">주문취소</a>--%>
|
||||
<%-- <c:if test="${ order.ordrTyCd != '05' }">--%>
|
||||
<%-- <a href="javascript:void(0);" onclick="fn_dlvylc_manage_pop('<c:out value="${order.sopmalCd}"/>', '<c:out value="${order.ordrInnb}"/>', '<c:out value="${order.ordrDlvyInnb}"/>', '<c:out value="${order.mbrInnb}"/>', '<c:out value="${order.mbrDvCd}"/>');" class="btn-ordr-sttus btn outline sm full">배송지 변경</a>--%>
|
||||
<%-- </c:if>--%>
|
||||
<%-- </c:when>--%>
|
||||
<%-- <c:when test="${order.ordrSttusCd > 24 && order.ordrSttusCd < 34}">--%>
|
||||
<%-- <a href="javascript:void(0);" onclick="fn_call_setle_cancl_pop('<c:out value="${order.sopmalCd}"/>', '<c:out value="${order.ordrInnb}"/>', '', '<c:out value="${order.ordrRceptDt}"/>', '<c:out value="${order.ordrSttusCd}"/>');" class="btn-ordr-sttus btn gray sm full">결제취소</a>--%>
|
||||
<%-- <c:if test="${ order.ordrTyCd != '05' }">--%>
|
||||
<%-- <a href="javascript:void(0);" onclick="fn_dlvylc_manage_pop('<c:out value="${order.sopmalCd}"/>', '<c:out value="${order.ordrInnb}"/>', '<c:out value="${order.ordrDlvyInnb}"/>', '<c:out value="${order.mbrInnb}"/>', '<c:out value="${order.mbrDvCd}"/>');" class="btn-ordr-sttus btn outline sm full">배송지 변경</a>--%>
|
||||
<%-- </c:if>--%>
|
||||
<%-- </c:when>--%>
|
||||
|
||||
<%-- <c:when test="${order.ordrSttusCd > 34 && order.ordrSttusCd < 55}">--%>
|
||||
<%-- <a href="javascript:void(0);" onclick="fn_call_dlvy_sweettracker_pop('<c:out value="${order.ordrInnb}"/>');" class="btn outline sm full">배송조회</a>--%>
|
||||
<%-- <a href="javascript:void(0);" onclick="fn_call_setle_cancl_pop('<c:out value="${order.sopmalCd}"/>', '<c:out value="${order.ordrInnb}"/>', '', '<c:out value="${order.ordrRceptDt}"/>', '<c:out value="${order.ordrSttusCd}"/>');" class="btn-ordr-sttus btn gray sm full">결제취소</a>--%>
|
||||
<%-- </c:when>--%>
|
||||
<%-- <c:when test="${order.ordrSttusCd > 54 && order.ordrSttusCd < 76 && order.sknEnvrnCd ne 'POS'}">--%>
|
||||
<%-- <a href="javascript:void(0);" onclick="fn_call_dlvy_sweettracker_pop('<c:out value="${order.ordrInnb}"/>');" class="btn outline sm full">배송조회</a>--%>
|
||||
<%-- <c:if test="${ order.purchsDcsnAt eq 'Y' }">--%>
|
||||
<%--<%– <a href="javascript:void(0);" onclick="fn_call_refund_pop('<c:out value="${order.sopmalCd}"/>', '<c:out value="${order.ordrInnb}"/>','<c:out value="${order.ordrRceptDt}"/>', '<c:out value="${order.setleTyCd}"/>', '<c:out value="${order.ordrSttusCd}"/>');" class="btn-ordr-sttus btn gray sm full">반품신청</a>–%>--%>
|
||||
<%-- <a href="javascript:void(0);" onclick="fn_pop_m2mqna_regist('<c:out value="${order.ordrInnb}"/>');" class="btn-ordr-sttus btn gray sm full">반품신청</a>--%>
|
||||
<%-- </c:if>--%>
|
||||
<%-- <c:if test="${ order.reviewAt eq 'Y' }">--%>
|
||||
<%-- <a href="<c:url value="/sopmal/mpage/act/selectMyRvwInqireForm"/>" class="btn-ordr-sttus btn theme sm full">리뷰작성</a>--%>
|
||||
<%-- </c:if>--%>
|
||||
<%-- <c:if test="${ order.purchsDcsnAt eq 'Y' }">--%>
|
||||
<%-- <a href="javascript:void(0);" onclick="fn_post_purchs_dcsn_by_ordr('<c:out value="${order.sopmalCd}"/>', '<c:out value="${order.ordrInnb}"/>');" class="btn-ordr-sttus btn theme sm full">구매확정</a>--%>
|
||||
<%-- </c:if>--%>
|
||||
<%-- </c:when>--%>
|
||||
<%-- <c:when test="${order.ordrSttusCd > 84 && order.ordrSttusCd < 100}">--%>
|
||||
<%-- <a class="btn full orderList__status cancel" style="background-color:transparent;"><c:out value="${order.ordrSttusNm}"/></a>--%>
|
||||
<%-- </c:when>--%>
|
||||
<%-- </c:choose>--%>
|
||||
<%-- </div>--%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<div class="orderList__no-result">
|
||||
<img src="<c:url value="/pc/images/icon__no-result.png"/>" alt="">
|
||||
<p class="orderList__no-result-text">주문내역이 없습니다.</p>
|
||||
</div>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
<div class="pagination__container" style="margin-top: 20px">
|
||||
<ui:pagination paginationInfo="${data.paginationInfo}" type="image" jsFunction="fn_get_ordr_dlvy_list"/>
|
||||
</div>
|
||||
File diff suppressed because it is too large
Load Diff
1664
src/main/webapp/WEB-INF/views/sopmal/mpage/ordr/SubsvcOrdrDtlR.jsp
Normal file
1664
src/main/webapp/WEB-INF/views/sopmal/mpage/ordr/SubsvcOrdrDtlR.jsp
Normal file
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user