diff --git a/src/main/java/nlib/col/service/CartCookieVO.java b/src/main/java/nlib/col/service/CartCookieVO.java
new file mode 100644
index 00000000..1a816c5c
--- /dev/null
+++ b/src/main/java/nlib/col/service/CartCookieVO.java
@@ -0,0 +1,113 @@
+package nlib.col.service;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import nlib.util.StringUtil;
+
+/**
+ *
+ * @Class Name : CartCookieVO.java
+ *
+ * @Description : 비로그인 회원의 카트정보를 담는 쿠키 정보값
+ *
+ *
+ * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
+ *
+ *
+ *
+ * @ ------------ -------- ---------------------------
+ * @ 수정일 수정자 수정내용
+ * @ ------------ -------- ---------------------------
+ * @ 2021. 10. 13. KNKIM 최초 생성
+ *
+ *
+ * @author 이씨플라자 * DIGITALSHIP KNKIM
+ * @since 2021. 10. 13.
+ * @version 1.0
+ *
+ */
+public class CartCookieVO {
+
+ String rentValues = null; /* 대출 목록으로 ":"로 구분되어 짐 */
+ String readValues = null; /* 방문열람 목록으로 ":"로 구분되어 짐 */
+
+ /**
+ * 쿠키 카트값에 자료 항목을 추가한다.
+ *
+ * @param cartTypeCd
+ * @param masterId
+ * @return
+ */
+ public String addCartItem(String cartTypeCd, String masterId) {
+
+ if(StringUtil.isEmpty(cartTypeCd)) return "카트구분 정보가 없습니다.";
+ if(StringUtil.isEmpty(masterId)) return "자료정보가 없습니다.";
+
+ String cartStr = null;
+
+ if("1".equals(cartTypeCd)) cartStr = getRentValues();
+ else if("2".equals(cartTypeCd)) cartStr = getReadValues();
+ else return "카트구분 정보가 적합하지 않습니다.";
+
+ cartStr = (StringUtil.isEmpty(cartStr) ? ":" : cartStr);
+ if(cartStr.contains(":" + masterId + ":")) return "이미 카트에 존재합니다.";
+
+ cartStr += (":" + masterId + ":");
+
+ if("1".equals(cartTypeCd)) setRentValues(cartStr);
+ else if("2".equals(cartTypeCd)) setReadValues(cartStr);
+
+ return null;
+ }
+
+ /**
+ * 쿠키 카트값에서 자료 항목을 삭제한다.
+ *
+ * @param cartTypeCd
+ * @param masterId
+ * @return
+ */
+ public String removeCartItem(String cartTypeCd, String masterId) {
+
+ if(StringUtil.isEmpty(cartTypeCd)) return "카트구분 정보가 없습니다.";
+ if(StringUtil.isEmpty(masterId)) return "자료정보가 없습니다.";
+
+ String cartStr = null;
+
+ if("1".equals(cartTypeCd)) cartStr = getRentValues();
+ else if("2".equals(cartTypeCd)) cartStr = getReadValues();
+ else return "카트구분 정보가 적합하지 않습니다.";
+
+
+ cartStr = (StringUtil.isEmpty(cartStr) ? ":" : cartStr);
+ if(StringUtil.isEmpty(cartStr) || !cartStr.contains(":" + masterId + ":")) return "해당 자료는 카트에 존재하지 않습니다.";
+
+ int startIdx = cartStr.indexOf(":" + masterId + ":");
+ if(startIdx < 0) return "해당 자료는 카트에 존재하지 않습니다.";
+
+ int endIdx = startIdx + (":" + masterId).length();
+
+ cartStr = cartStr.substring(0, startIdx) + cartStr.substring(endIdx);
+
+ if("1".equals(cartTypeCd)) setRentValues(cartStr);
+ else if("2".equals(cartTypeCd)) setReadValues(cartStr);
+
+ return null;
+ }
+
+ // GET & SET
+ public String getRentValues() {
+ return rentValues;
+ }
+ public void setRentValues(String rentValues) {
+ this.rentValues = rentValues;
+ }
+ public String getReadValues() {
+ return readValues;
+ }
+ public void setReadValues(String readValues) {
+ this.readValues = readValues;
+ }
+
+}
diff --git a/src/main/java/nlib/col/service/CartService.java b/src/main/java/nlib/col/service/CartService.java
index e646bd95..2fafd9a1 100644
--- a/src/main/java/nlib/col/service/CartService.java
+++ b/src/main/java/nlib/col/service/CartService.java
@@ -1,16 +1,9 @@
package nlib.col.service;
-import java.util.HashMap;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
-
-import org.springframework.http.HttpMethod;
-
-import nlib.restful.service.DataApiReqVO;
-import nlib.restful.service.DataApiResVO;
-import nlib.restful.service.XmlConverter;
-import nlib.util.StringUtil;
+import javax.servlet.http.HttpServletResponse;
public interface CartService
{
@@ -23,7 +16,7 @@ public interface CartService
* @return
* @throws Exception
*/
- public List listCartItems(String mbInfoId, String cartDivCd) throws Exception;
+ public List listCartItems(String mbInfoId, String cartTypeCd) throws Exception;
/**
* (비로그인자용) 쿠키에서 카트 목록을 조회한다.
@@ -33,7 +26,7 @@ public interface CartService
* @return
* @throws Exception
*/
- public List listCartItemsFromCookie(HttpServletRequest request, String cartDivCd) throws Exception;
+ public List listCartItemsFromCookie(HttpServletRequest request, HttpServletResponse response, String cartDivCd) throws Exception;
/**
* (로그인자용) 카트 영역 구분코드를 변경한다. (대출 <-> 방문열람)
@@ -53,7 +46,7 @@ public interface CartService
* @return
* @throws Exception
*/
- public int changeCartTypeFromCookie(HttpServletRequest request, List targetCartItems) throws Exception;
+ public String changeCartTypeToCookie(HttpServletRequest request, HttpServletResponse response, CollectionVO cartVO) throws Exception;
/**
* (로그인자용) 카트에 추가한다.
@@ -71,7 +64,7 @@ public interface CartService
* @return
* @throws Exception
*/
- public String insertCartItemToCookie(HttpServletRequest request, CollectionVO cartVO) throws Exception;
+ public String insertCartItemToCookie(HttpServletRequest request, HttpServletResponse response, CollectionVO cartVO) throws Exception;
/**
* (로그인자용) 카트에서 선택된 자료들을 삭제한다.
@@ -89,7 +82,7 @@ public interface CartService
* @return
* @throws Exception
*/
- public String deleteCartItems(HttpServletRequest request, List targetCartItems) throws Exception;
+ public String deleteCartItemsFromCookie(HttpServletRequest request, HttpServletResponse response, CollectionVO cartVO) throws Exception;
/**
* 비로그인시 카트에 저장된 내역을 로그인한 후 해당 사용자의 카트로 저장하고, 쿠키 카트내용은 초기화한다.
diff --git a/src/main/java/nlib/col/service/CollectionVO.java b/src/main/java/nlib/col/service/CollectionVO.java
index 0186c440..23eed0c0 100644
--- a/src/main/java/nlib/col/service/CollectionVO.java
+++ b/src/main/java/nlib/col/service/CollectionVO.java
@@ -137,6 +137,13 @@ public class CollectionVO extends PagingVO {
this.resultMessage = resultMessage;
}
+ public static CollectionVO createWithMasterId(String cartTypeCd, String masterId) {
+ CollectionVO vo = new CollectionVO();
+ vo.setCartTypeCd(cartTypeCd);
+ vo.setMasterId(masterId);
+ return vo;
+ }
+
// GET & SET
public String getMasterId() {
diff --git a/src/main/java/nlib/col/service/impl/CartServiceImpl.java b/src/main/java/nlib/col/service/impl/CartServiceImpl.java
index da77606a..285f6655 100644
--- a/src/main/java/nlib/col/service/impl/CartServiceImpl.java
+++ b/src/main/java/nlib/col/service/impl/CartServiceImpl.java
@@ -1,14 +1,18 @@
package nlib.col.service.impl;
+import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
+import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
+import nlib.col.service.CartCookieVO;
import nlib.col.service.CartService;
import nlib.col.service.CollectionService;
import nlib.col.service.CollectionVO;
@@ -41,6 +45,10 @@ public class CartServiceImpl implements CartService
{
private static final Logger log = LoggerFactory.getLogger(CartServiceImpl.class);
+ // 비로그인회원의 카트정보 쿠키명
+ public static final String CART_COOKIE_NAME = "_NLIB_COOKIE";
+
+
@Resource(name="cartDAO")
private CartDAO cartDAO;
@@ -67,8 +75,31 @@ public class CartServiceImpl implements CartService
* @return
* @throws Exception
*/
- public List listCartItemsFromCookie(HttpServletRequest request, String cartDivCd) throws Exception {
- return null;
+ public List listCartItemsFromCookie(HttpServletRequest request, HttpServletResponse response, String cartDivCd) throws Exception {
+ Cookie[] cookies = request.getCookies();
+ if(cookies == null || cookies.length < 1) return null;
+
+ List list = new ArrayList();
+
+ String targetCookieName = CART_COOKIE_NAME + (cartDivCd == null || cartDivCd.equals("0") ? "" : cartDivCd);
+
+ for(Cookie cookie : cookies) {
+ String cookieName = cookie.getName();
+ if(cookieName.startsWith(targetCookieName)) {
+
+ // _NLIB_COOKIE1=:masterId:masterId:
+ String cartStr = cookie.getValue();
+ String[] cartItemsStr = cartStr.split(":");
+ for(String itemStr : cartItemsStr) {
+ if(StringUtil.isEmpty(itemStr)) continue;
+ CollectionVO vo = CollectionVO.createWithMasterId(cookieName.substring(cookieName.length()-2), itemStr);
+ vo.setMbCartId(vo.getMasterId()); // 비회원 쿠키 카트의 경우, 카트ID를 자료ID로 대체한다.
+ if(vo != null) list.add(vo);
+ }
+ }
+ }
+
+ return list;
}
/**
@@ -82,6 +113,11 @@ public class CartServiceImpl implements CartService
public String changeCartType(CollectionVO cartVO) throws Exception {
if(cartVO == null || StringUtil.isEmpty(cartVO.getMbInfoId())) return "회원 정보가 없습니다.";
if(StringUtil.isEmpty(cartVO.getSelItems())) return "변경할 대상 정보가 없습니다.";
+
+ String checkResult = checkValidCartItems(cartVO.getCartTypeCd(), cartVO.getSelItems());
+ if(checkResult != null) return checkResult;
+
+ updateSelItemsForDB(cartVO);
int resultCnt = cartDAO.changeCartType(cartVO);
if(resultCnt > 0) return null;
@@ -97,8 +133,65 @@ public class CartServiceImpl implements CartService
* @return
* @throws Exception
*/
- public int changeCartTypeFromCookie(HttpServletRequest request, List targetCartItems) throws Exception {
- return 0;
+ public String changeCartTypeToCookie(HttpServletRequest request, HttpServletResponse response, CollectionVO cartVO) throws Exception {
+
+ if(cartVO == null) return "요청 정보가 없습니다.";
+ if(StringUtil.isEmpty(cartVO.getSelItems())) return "변경할 대상 정보가 없습니다.";
+
+ String checkResult = checkValidCartItems(cartVO.getCartTypeCd(), cartVO.getSelItems());
+ if(checkResult != null) return checkResult;
+
+ int totCnt = 0;
+ int sucCnt = 0;
+ int errCnt = 0;
+
+ String addCartTypeCd = null;
+ String delCartTypeCd = null;
+
+ if("1".equals(cartVO.getCartTypeCd())) {
+ addCartTypeCd = "1";
+ delCartTypeCd = "2";
+ } else if("2".equals(cartVO.getCartTypeCd())) {
+ addCartTypeCd = "2";
+ delCartTypeCd = "1";
+ } else {
+ return "카트 구분값 정보가 정확하지 않습니다.";
+ }
+
+ String[] masterIds = cartVO.getSelItems().split(",");
+ String resultMsgAdd = null;
+ String resultMsgDel = null;
+
+ // 쿠키 카트 정보 가져오기
+ CartCookieVO cartCookie = getCartCookieInfo(request);
+
+ for(int i=0; i " + delCartTypeCd + "카트 " + masterIds[i] + " : 삭제오류 => " + resultMsgDel);
+ } else {
+ errCnt++;
+ log.error("changeCartTypeFromCookie adding > " + addCartTypeCd + "카트 " + masterIds[i] + " : 추가 오류 => " + resultMsgAdd);
+ }
+
+ }
+
+ if(sucCnt > 0) {
+ String result = setCookieCart(response, cartCookie);
+ if(result == null) {
+ if(totCnt == sucCnt) return null;
+ else return String.format("총 %d건의 자료 중 %d건에 대한 변경 처리가 정상적으로 처리되었습니다.", totCnt, sucCnt);
+ } else {
+ return result;
+ }
+ }
+
+ return StringUtil.getString(resultMsgAdd, "") + StringUtil.getString(resultMsgDel, "");
}
/**
@@ -124,6 +217,126 @@ public class CartServiceImpl implements CartService
return "등록 처리에 실패하였습니다. 관리자에게 문의하여 주시기 바랍니다.";
}
+ /**
+ * (비로그인자용) 카트에 추가한다.
+ *
+ * @param cartVO
+ * @return
+ * @throws Exception
+ */
+ public String insertCartItemToCookie(HttpServletRequest request, HttpServletResponse response, CollectionVO cartVO) throws Exception {
+
+ cartVO = checkValidCartItem(cartVO);
+
+ if(cartVO.getResultCode().charAt(0) != 'S') return cartVO.getResultMessage();
+
+
+ //-----------------------------------------------
+ // 등록 처리
+ //-----------------------------------------------
+
+ // 쿠키 카트 정보 가져오기
+ CartCookieVO cartCookie = getCartCookieInfo(request);
+ String result = cartCookie.addCartItem(cartVO.getCartTypeCd(), cartVO.getMasterId());
+
+ if(result != null) return result;
+
+ return setCookieCart(response, cartCookie);
+ }
+
+ /**
+ * (비로그인자용) 쿠키에서 카트 정보를 조회하여 CartCookieVO 생성하여 리턴한다.
+ *
+ * @param request
+ * @return
+ */
+ public CartCookieVO getCartCookieInfo(HttpServletRequest request) {
+ CartCookieVO cartCookieInfo = new CartCookieVO();
+ cartCookieInfo.setRentValues(getCookie(request, CART_COOKIE_NAME + "1"));
+ cartCookieInfo.setReadValues(getCookie(request, CART_COOKIE_NAME + "2"));
+
+ return cartCookieInfo;
+ }
+
+ /**
+ * (비로그인자용) 쿠키 카트에 자료 항목을 추가한다.
+ *
+ * @param request
+ * @param response
+ * @param cartTypeCd
+ * @param masterId
+ * @return
+ */
+ public String setCookieCart(HttpServletResponse response, CartCookieVO cartCookie) {
+
+ if(response == null) return "쿠키를 저장할 Response 객체 정보가 없습니다.";
+ if(cartCookie == null) return "쿠키에 저장할 카트정보가 없습니다.";
+
+ setCookie(response, CART_COOKIE_NAME + "1", cartCookie.getRentValues());
+ setCookie(response, CART_COOKIE_NAME + "2", cartCookie.getReadValues());
+
+ return null;
+ }
+
+ /**
+ * (비로그인자용) 쿠키값을 설정한다.
+ *
+ * @param response
+ * @param name
+ * @param value
+ */
+ public void setCookie(HttpServletResponse response, String name, String value) {
+ Cookie cookie = new Cookie(name, value);
+ response.addCookie(cookie);
+ }
+
+ /**
+ * (비로그인자용) 쿠키값을 가져온다.
+ *
+ * @param request
+ * @param cookieName
+ * @return
+ */
+ public String getCookie(HttpServletRequest request, String cookieName) {
+ Cookie[] cookies = request.getCookies();
+
+ if(cookies == null || cookies.length < 1) return null;
+ if(StringUtil.isEmpty(cookieName)) return null;
+
+ for(Cookie cookie : cookies) {
+ if(cookieName.equalsIgnoreCase(cookie.getName())) {
+ return cookie.getValue();
+ }
+ }
+
+ return null;
+ }
+
+
+ /**
+ * 해당 자료가 대출/열람 카트 유형에 추가될 수 있는지 검증한다.
+ *
+ * @param String : null 정상
+ * @return
+ * @throws Exception
+ */
+ public String checkValidCartItems(String cartTypeCd, String selItems) throws Exception {
+
+ if(StringUtil.isEmpty(cartTypeCd)) return "카트 유형 정보가 존재하지 않습니다.";
+ if(StringUtil.isEmpty(selItems)) return "대상 자료 정보가 존재하지 않습니다.";
+
+ String masterIds[] = selItems.split(",");
+ for(int i=0; i 0) return null;
return "변경 처리에 실패하였습니다. 관리자에게 문의하여 주시기 바랍니다.";
-
}
-
+
/**
* (비로그인자용) 카트에서 선택된 자료들을 삭제한다.
*
@@ -245,10 +453,75 @@ public class CartServiceImpl implements CartService
* @return
* @throws Exception
*/
- public String deleteCartItems(HttpServletRequest request, List targetCartItems) throws Exception {
- return null;
- }
+ public String deleteCartItemsFromCookie(HttpServletRequest request, HttpServletResponse response, CollectionVO cartVO) throws Exception {
+ if(cartVO == null) return "요청 정보가 없습니다.";
+ if(StringUtil.isEmpty(cartVO.getSelItems())) return "변경할 대상 정보가 없습니다.";
+
+ int totCnt = 0;
+ int sucCnt = 0;
+ int errCnt = 0;
+
+ String delCartTypeCd = cartVO.getCartTypeCd();
+
+ if(!"1".equals(delCartTypeCd) && !"2".equals(delCartTypeCd)) {
+ return "카트 구분값 정보가 정확하지 않습니다.";
+ }
+
+ // 쿠키 카트 정보 가져오기
+ CartCookieVO cartCookie = getCartCookieInfo(request);
+
+ String[] masterIds = cartVO.getSelItems().split(",");
+ String resultMsgDel = null;
+ for(int i=0; i " + delCartTypeCd + "카트 " + masterIds[i] + " : 삭제 오류 => " + resultMsgDel);
+ }
+ }
+
+ if(sucCnt > 0) {
+ String result = setCookieCart(response, cartCookie);
+ if(result == null) {
+ if(totCnt == sucCnt) return null;
+ else return String.format("총 %d건의 자료 중 %d건에 대한 삭제가 정상적으로 처리되었습니다.", totCnt, sucCnt);
+ } else {
+ return result;
+ }
+ }
+
+ return StringUtil.getString(resultMsgDel, "");
+ }
+
+ public void updateSelItemsForDB(CollectionVO cartVO) {
+
+ if(cartVO == null || StringUtil.isEmpty(cartVO.getMbInfoId())) return;
+
+ String selItems = cartVO.getSelItems();
+
+ if(!selItems.startsWith("'")) {
+ String[] items = selItems.split(",");
+ String newSelItems = "";
+ for(String item : items) {
+
+ if(StringUtil.isEmpty(item)) continue;
+
+ if(newSelItems.length() > 0) newSelItems += ",";
+
+ newSelItems += "'" + item + "'";
+ }
+ cartVO.setSelItems(newSelItems);
+ }
+
+ log.debug("updateSelItemsForDB > " + cartVO.getSelItems());
+ }
+
/**
* 비로그인시 카트에 저장된 내역을 로그인한 후 해당 사용자의 카트로 저장하고, 쿠키 카트내용은 초기화한다.
*
@@ -261,4 +534,4 @@ public class CartServiceImpl implements CartService
return 0;
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/nlib/col/service/impl/CollectionDAO.java b/src/main/java/nlib/col/service/impl/CollectionDAO.java
new file mode 100644
index 00000000..b7d4edcb
--- /dev/null
+++ b/src/main/java/nlib/col/service/impl/CollectionDAO.java
@@ -0,0 +1,11 @@
+package nlib.col.service.impl;
+
+import egovframework.rte.psl.dataaccess.mapper.Mapper;
+import nlib.col.service.CollectionVO;
+
+@Mapper("collectionDAO")
+public interface CollectionDAO {
+
+ public CollectionVO selectMngOrgInfo(String masterId) throws Exception;
+
+}
\ No newline at end of file
diff --git a/src/main/java/nlib/col/service/impl/CollectionServiceImpl.java b/src/main/java/nlib/col/service/impl/CollectionServiceImpl.java
index e7daf76f..d8b74d94 100644
--- a/src/main/java/nlib/col/service/impl/CollectionServiceImpl.java
+++ b/src/main/java/nlib/col/service/impl/CollectionServiceImpl.java
@@ -49,6 +49,10 @@ public class CollectionServiceImpl implements CollectionService {
@Resource(name = "dataApi")
private DataApi dataApi;
+ @Resource(name="collectionDAO")
+ private CollectionDAO collectionDAO;
+
+
/**
* 자료 상세정보를 조회한다.
*
@@ -262,8 +266,17 @@ public class CollectionServiceImpl implements CollectionService {
vo.setRsrvPsblYn (cVO.getRsrvPsblYn());
vo.setReqPsblYn (cVO.getReqPsblYn());
vo.setInterestYn (cVO.getInterestYn());
+
+ // DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
+ // API에 존재하지 않을 경우, 추가 DB 조회
+ if(StringUtil.isEmpty(cVO.getMngOrgCd()) || StringUtil.isEmpty(cVO.getMngOrgNm())) {
+ CollectionVO dbVO = collectionDAO.selectMngOrgInfo(vo.getMasterId());
+ if(dbVO != null) {
+ vo.setMngOrgCd(dbVO.getMngOrgCd());
+ vo.setMngOrgNm(dbVO.getMngOrgNm());
+ }
+ }
}
-
//
// // DDDDDDDDDDDDDDDDDd 문화원 멀티 처리를 위해 테스트용으로 데이터 변경
// CollectionVO vo = list.get(cnt-2);
diff --git a/src/main/java/nlib/col/web/CartController.java b/src/main/java/nlib/col/web/CartController.java
index 519708cf..6994f4b6 100644
--- a/src/main/java/nlib/col/web/CartController.java
+++ b/src/main/java/nlib/col/web/CartController.java
@@ -1,10 +1,13 @@
package nlib.col.web;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -63,15 +66,16 @@ public class CartController extends NlibCommonController
* 로그인되지 않은 사용자의 경우, 쿠키에 저장된 값으로 처리한다.
*
* @param request
- * @param cartTypeCd
+ * @param cartTyp
+ * eCd
* @param model
* @return
* @throws Exception
*/
@RequestMapping("/cart/listCartItems.do")
- public String listCartItems(HttpServletRequest request, String message, String cartTypeCd, ModelMap model) throws Exception {
+ public String listCartItems(HttpServletRequest request, HttpServletResponse response, String message, String cartTypeCd, ModelMap model) throws Exception {
- if(StringUtil.isEmpty(cartTypeCd)) cartTypeCd = "0"; // 대출 기본 설정
+ if(StringUtil.isEmpty(cartTypeCd)) cartTypeCd = "1"; // 대출 기본 설정
String mbInfoId = getMbInfoId(request);
@@ -80,20 +84,72 @@ public class CartController extends NlibCommonController
// 카트 목록 가져오기
if(StringUtil.isEmpty(mbInfoId)) {
// 쿠키에서 값 가져오기
- list = cartService.listCartItemsFromCookie(request, cartTypeCd);
+ list = cartService.listCartItemsFromCookie(request, response, cartTypeCd);
+
+ // 카트 목록 자료에 대한 상세자료 설정
+ collectionService.setDetailInfoForList(list);
+
+ // 문화원별 정령 처리
+ list = sortCollectionListByMngOrgCd(list);
} else {
list = cartService.listCartItems(mbInfoId, cartTypeCd);
+
+ // 카트 목록 자료에 대한 상세자료 설정
+ collectionService.setDetailInfoForList(list);
}
- // 카트 목록 자료에 대한 상세자료 설정
- collectionService.setDetailInfoForList(list);
+ if(StringUtil.isNotEmpty(message) && message.startsWith("%")) {
+ message = StringUtil.decodeUrl(message);
+ }
model.addAttribute("list", list);
model.addAttribute("cartTypeCd", cartTypeCd);
model.addAttribute("message", message);
return "nlib/cart/listCartItems";
}
+
+ /**
+ * 자료 목록을 문화원별로 정렬하여 리턴한다.
+ *
+ * @param list
+ * @return
+ */
+ public List sortCollectionListByMngOrgCd(List list) {
+
+ if(list == null || list.size() < 1) return list;
+
+ Map> orgMap = new HashMap>();
+
+ for(CollectionVO vo : list) {
+ String mngOrgCd = vo.getMngOrgCd();
+
+ if(StringUtil.isEmpty(mngOrgCd)) {
+ mngOrgCd = "NONE";
+ vo.setMngOrgCd(mngOrgCd);
+ vo.setMngOrgNm("(없음)");
+ }
+ List orgList = orgMap.get(mngOrgCd);
+ if(orgList == null) {
+ orgList = new ArrayList();
+ }
+
+ orgList.add(vo);
+
+ orgMap.put(mngOrgCd, orgList);
+ }
+
+ List retList = new ArrayList();
+ for(String key : orgMap.keySet()) {
+ List orgList = orgMap.get(key);
+
+ for(CollectionVO vo : orgList) {
+ retList.add(vo);
+ }
+ }
+
+ return retList;
+ }
/**
* 카트 영역 구분코드를 변경한다. (대출 <-> 방문열람)
@@ -105,20 +161,21 @@ public class CartController extends NlibCommonController
* @throws Exception
*/
@RequestMapping("/cart/changeCartType.do")
- public String changeCartType(HttpServletRequest request, CollectionVO cartVO, ModelMap model) throws Exception {
+ public String changeCartType(HttpServletRequest request, HttpServletResponse response, CollectionVO cartVO, ModelMap model) throws Exception {
String message = null;
String mbInfoId = getMbInfoId(request);
if(StringUtil.isEmpty(mbInfoId)) {
- cartService.changeCartTypeFromCookie(request, null);
+ message = cartService.changeCartTypeToCookie(request, response, cartVO);
} else {
cartVO.setMbInfoId(getMbInfoId(request));
message = cartService.changeCartType(cartVO);
}
if(message == null) message = "정상적으로 변경되었습니다.";
- model.addAttribute("message", message);
+ model.addAttribute("message", StringUtil.encodeUrl(message));
+ model.addAttribute("cartTypeCd", cartVO.getCartTypeCd());
return "redirect:/cart/listCartItems.do";
}
@@ -132,7 +189,7 @@ public class CartController extends NlibCommonController
* @throws Exception
*/
@RequestMapping("/cart/insertCartItemAjax.do")
- public ResponseEntity insertCartItemAjax(HttpServletRequest request, @RequestBody CollectionVO cartVO, ModelMap model) throws Exception {
+ public ResponseEntity insertCartItemAjax(HttpServletRequest request, HttpServletResponse response, @RequestBody CollectionVO cartVO, ModelMap model) throws Exception {
log.debug("insertCartItemAjax > masterId = " + cartVO.getMasterId());
@@ -152,11 +209,10 @@ public class CartController extends NlibCommonController
cartVO.setMbInfoId(mbInfoId);
cartVO.setRegId(mbInfoId);
message = cartService.insertCartItem(cartVO);
-
}
// 비회원인 경우
else {
- message = cartService.insertCartItemToCookie(request, cartVO);
+ message = cartService.insertCartItemToCookie(request, response, cartVO);
}
if(message == null) {
@@ -187,10 +243,16 @@ public class CartController extends NlibCommonController
}
@RequestMapping("/cart/deleteCartItems.do")
- public String deleteCartItems(HttpServletRequest request, CollectionVO cartVO, ModelMap model) throws Exception {
+ public String deleteCartItems(HttpServletRequest request, HttpServletResponse response, CollectionVO cartVO, ModelMap model) throws Exception {
String mbInfoId = getMbInfoId(request);
cartVO.setMbInfoId(mbInfoId);
- String message = cartService.deleteCartItems(cartVO);
+ String message = null;
+
+ if(!StringUtil.isEmpty(mbInfoId)) {
+ message = cartService.deleteCartItems(cartVO);
+ } else {
+ message = cartService.deleteCartItemsFromCookie(request, response, cartVO);
+ }
if(message == null) message = "정상적으로 삭제되었습니다.";
model.addAttribute("message", StringUtil.encodeUrl(message));
diff --git a/src/main/java/nlib/restful/service/DataApiVO.java b/src/main/java/nlib/restful/service/DataApiVO.java
index b8ca9eb3..6f2d4664 100644
--- a/src/main/java/nlib/restful/service/DataApiVO.java
+++ b/src/main/java/nlib/restful/service/DataApiVO.java
@@ -136,7 +136,7 @@ public class DataApiVO {
public List> getList(String listName) {
if(StringUtil.isEmpty(listName)) return null;
- if(listMap == null && listMap.size() < 1) return null;
+ if(listMap == null || listMap.size() < 1) return null;
return listMap.get(listName);
}
diff --git a/src/main/java/nlib/security/SpringSecurityConfig.java b/src/main/java/nlib/security/SpringSecurityConfig.java
index 61ea8099..04cf45d3 100644
--- a/src/main/java/nlib/security/SpringSecurityConfig.java
+++ b/src/main/java/nlib/security/SpringSecurityConfig.java
@@ -87,6 +87,7 @@ public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
.antMatchers("/code/**").permitAll()
.antMatchers("/homes/**").permitAll()
.antMatchers("/homes/**").permitAll()
+ .antMatchers("/cart/**").permitAll()
.antMatchers("/bbs/**").permitAll()
.anyRequest().authenticated()
.and().formLogin()
diff --git a/src/main/java/nlib/util/StringUtil.java b/src/main/java/nlib/util/StringUtil.java
index 19b22b38..d1bcd04d 100644
--- a/src/main/java/nlib/util/StringUtil.java
+++ b/src/main/java/nlib/util/StringUtil.java
@@ -1,6 +1,7 @@
package nlib.util;
import java.net.URL;
+import java.net.URLDecoder;
import java.net.URLEncoder;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
@@ -123,7 +124,7 @@ public class StringUtil extends StringUtils {
}
/**
- * Base64로 인코딩한다.
+ * URLEncoder로 인코딩한다.
*
* @return
*/
@@ -142,6 +143,26 @@ public class StringUtil extends StringUtils {
return encodedStr;
}
+ /**
+ * URLDecoder로 디코딩한다.
+ *
+ * @return
+ */
+ public static String decodeUrl(String str) {
+
+ if(isEmpty(str)) return "";
+
+ String decodedStr = null;
+
+ try {
+ decodedStr = URLDecoder.decode(str, "UTF-8");
+ } catch(Exception e) {
+ log.error("encodeUrl > Error while encoding for [" + str + "] " + e.toString());
+ decodedStr = str;
+ }
+ return decodedStr;
+ }
+
/**
* Base64로 인코딩한다.
*
diff --git a/src/main/resources/egovframework/mapper/nlib/col/CartDAO_SQL.xml b/src/main/resources/egovframework/mapper/nlib/col/CartDAO_SQL.xml
index 9a65915c..e83e04e8 100644
--- a/src/main/resources/egovframework/mapper/nlib/col/CartDAO_SQL.xml
+++ b/src/main/resources/egovframework/mapper/nlib/col/CartDAO_SQL.xml
@@ -74,7 +74,7 @@
@@ -83,7 +83,7 @@
diff --git a/src/main/resources/egovframework/mapper/nlib/col/CollectionDAO_SQL.xml b/src/main/resources/egovframework/mapper/nlib/col/CollectionDAO_SQL.xml
index 7562f961..416f95eb 100644
--- a/src/main/resources/egovframework/mapper/nlib/col/CollectionDAO_SQL.xml
+++ b/src/main/resources/egovframework/mapper/nlib/col/CollectionDAO_SQL.xml
@@ -1,7 +1,15 @@
-
+
+
+
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/jsp/nlib/cart/listCartItems.jsp b/src/main/webapp/WEB-INF/jsp/nlib/cart/listCartItems.jsp
index 44b0290c..337c9333 100644
--- a/src/main/webapp/WEB-INF/jsp/nlib/cart/listCartItems.jsp
+++ b/src/main/webapp/WEB-INF/jsp/nlib/cart/listCartItems.jsp
@@ -189,16 +189,7 @@ function fn_changeCartItems(cartTypeCd, cartTypeNm) {
cartTypeCd =
mngOrgCd =
selItems =
- message = ${message }
-
- 전체
-
-
- 전체
-
-
- |
대출
@@ -268,10 +259,11 @@ function fn_changeCartItems(cartTypeCd, cartTypeNm) {
|
chk_item_${cart.mngOrgCd }
- |
+
${cart.mbCartId } |
: ${cart.interestYn } |
- ${cart.title }
+ | ${cart.title }
+ ${cart.masterId }
${cart.mngOrgCd }
|
diff --git a/src/main/webapp/WEB-INF/jsp/nlib/sample/listRentItem.jsp b/src/main/webapp/WEB-INF/jsp/nlib/sample/listRentItem.jsp
index 67d31e54..4b215809 100644
--- a/src/main/webapp/WEB-INF/jsp/nlib/sample/listRentItem.jsp
+++ b/src/main/webapp/WEB-INF/jsp/nlib/sample/listRentItem.jsp
@@ -85,7 +85,7 @@
> useStatus = ${record.useStatus}
> masterId = ${record.masterId}
-
+
diff --git a/src/main/webapp/js/cart.js b/src/main/webapp/js/cart.js
index c7c7f5ab..32fbcc43 100644
--- a/src/main/webapp/js/cart.js
+++ b/src/main/webapp/js/cart.js
@@ -6,7 +6,7 @@
*
*/
-function fn_addRentCart(masterId, mngOrgCd, typeDivCd, useStatus) {
+function fn_addRentCart(masterId, useStatus) {
/* useStatus
01 : 이용가능
@@ -17,7 +17,7 @@ function fn_addRentCart(masterId, mngOrgCd, typeDivCd, useStatus) {
06 : 열람대기(대출불가능)
07 : 온라인열람만"
*/
- fn_addRentCartItem(masterId, mngOrgCd, typeDivCd, useStatus
+ fn_addRentCartItem(masterId, useStatus
, function(data) {
if(data.code == "S") {
if(confirm(data.message + "\n카트로 이동하시겠습니까?")) {
@@ -39,7 +39,7 @@ function fn_gotoCart() {
location.href = "/cart/listCartItems.do";
}
-function fn_addRentCartItem(masterId, mngOrgCd, typeDivCd, useStatus, resolve, reject) {
+function fn_addRentCartItem(masterId, useStatus, resolve, reject) {
var cartTypeCd = null;
@@ -73,8 +73,6 @@ function fn_addRentCartItem(masterId, mngOrgCd, typeDivCd, useStatus, resolve, r
type : "POST",
data: JSON.stringify({
masterId : masterId,
- mngOrgCd : mngOrgCd,
- typeDivCd : typeDivCd,
cartTypeCd : cartTypeCd
}),
success : function(data) {