From 655b326d637230c117f73b834fd4e1386d35a5f5 Mon Sep 17 00:00:00 2001 From: KNKIM Date: Fri, 8 Oct 2021 17:08:02 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B9=B4=ED=8A=B8=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B0=9C=EB=B0=9C=20=EC=A4=91=EA=B0=84=EB=B0=B1=EC=97=85=20-?= =?UTF-8?q?=20=ED=9A=8C=EC=9B=90=EC=9A=A9=20DB=20=EC=B9=B4=ED=8A=B8=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/nlib/col/service/CartService.java | 112 ++++++- .../java/nlib/col/service/impl/CartDAO.java | 39 ++- .../col/service/impl/CartServiceImpl.java | 282 ++++++++++++++-- .../java/nlib/col/web/CartController.java | 277 +++++++++++++--- .../restful/service/DataApiInterface.java | 20 +- .../java/nlib/restful/service/DataApiVO.java | 6 +- .../mapper/nlib/col/CartDAO_SQL.xml | 91 +++++ .../WEB-INF/jsp/nlib/cart/listCartItems.jsp | 311 ++++++++++++++++++ src/main/webapp/WEB-INF/tiles/inc/header.jsp | 3 + src/main/webapp/js/cart.js | 95 ++++++ 10 files changed, 1140 insertions(+), 96 deletions(-) create mode 100644 src/main/resources/egovframework/mapper/nlib/col/CartDAO_SQL.xml create mode 100644 src/main/webapp/WEB-INF/jsp/nlib/cart/listCartItems.jsp create mode 100644 src/main/webapp/js/cart.js diff --git a/src/main/java/nlib/col/service/CartService.java b/src/main/java/nlib/col/service/CartService.java index 6e266f6a..e646bd95 100644 --- a/src/main/java/nlib/col/service/CartService.java +++ b/src/main/java/nlib/col/service/CartService.java @@ -1,10 +1,104 @@ -package nlib.col.service; - -import nlib.restful.service.DataApiReqVO; -import nlib.restful.service.DataApiResVO; - -public interface CartService -{ - - +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; + +public interface CartService +{ + + /** + * (로그인자용) 로그인한 사용자의 카트 목록을 조회한다. + * + * @param mbInfoId + * @param cartDivCd + * @return + * @throws Exception + */ + public List listCartItems(String mbInfoId, String cartDivCd) throws Exception; + + /** + * (비로그인자용) 쿠키에서 카트 목록을 조회한다. + * + * @param request + * @param cartDivCd + * @return + * @throws Exception + */ + public List listCartItemsFromCookie(HttpServletRequest request, String cartDivCd) throws Exception; + + /** + * (로그인자용) 카트 영역 구분코드를 변경한다. (대출 <-> 방문열람) + * + * @param mbInfoId + * @param targetCartItems + * @return + * @throws Exception + */ + public String changeCartType(CollectionVO cartVO) throws Exception; + + /** + * (비로그인자용) 카트 영역 구분코드를 변경한다. (대출 <-> 방문열람) + * + * @param request + * @param targetCartItems + * @return + * @throws Exception + */ + public int changeCartTypeFromCookie(HttpServletRequest request, List targetCartItems) throws Exception; + + /** + * (로그인자용) 카트에 추가한다. + * + * @param cartVO + * @return + * @throws Exception + */ + public String insertCartItem(CollectionVO cartVO) throws Exception; + + /** + * (비로그인자용) 카트에 추가한다. + * + * @param cartVO + * @return + * @throws Exception + */ + public String insertCartItemToCookie(HttpServletRequest request, CollectionVO cartVO) throws Exception; + + /** + * (로그인자용) 카트에서 선택된 자료들을 삭제한다. + * + * @param targetCartItems + * @return + * @throws Exception + */ + public String deleteCartItems(CollectionVO cartVO) throws Exception; + + /** + * (비로그인자용) 카트에서 선택된 자료들을 삭제한다. + * + * @param targetCartItems + * @return + * @throws Exception + */ + public String deleteCartItems(HttpServletRequest request, List targetCartItems) throws Exception; + + /** + * 비로그인시 카트에 저장된 내역을 로그인한 후 해당 사용자의 카트로 저장하고, 쿠키 카트내용은 초기화한다. + * + * @param mbInfoId + * @param request + * @return + * @throws Exception + */ + public int saveCartItemsOfNonMember(String mbInfoId, HttpServletRequest request) throws Exception; + } \ No newline at end of file diff --git a/src/main/java/nlib/col/service/impl/CartDAO.java b/src/main/java/nlib/col/service/impl/CartDAO.java index 442f2532..6487331f 100644 --- a/src/main/java/nlib/col/service/impl/CartDAO.java +++ b/src/main/java/nlib/col/service/impl/CartDAO.java @@ -1,16 +1,25 @@ -package nlib.col.service.impl; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Repository; - -import nlib.restful.DataApi; -import nlib.restful.service.DataApiReqVO; -import nlib.restful.service.DataApiResVO; - -@Repository("cartDAO") -public class CartDAO extends DataApi -{ - private static final Logger log = LoggerFactory.getLogger(CartDAO.class); - +package nlib.col.service.impl; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import nlib.col.service.CollectionVO; + +@Mapper("cartDAO") +public interface CartDAO { + + public List listCartItems(@Param("mbInfoId") String mbInfoId, @Param("cartTypeCd") String cartTypeCd) throws Exception; + + public int changeCartDiv(CollectionVO cartVO) throws Exception; + + public int countCartItem(CollectionVO cartVO) throws Exception; + + public int insertCartItem(CollectionVO cartVO) throws Exception; + + public int deleteCartItems(CollectionVO cartVO) throws Exception; + + public int changeCartType(CollectionVO cartVO) throws Exception; + } \ No newline at end of file diff --git a/src/main/java/nlib/col/service/impl/CartServiceImpl.java b/src/main/java/nlib/col/service/impl/CartServiceImpl.java index 50c781bb..59376eba 100644 --- a/src/main/java/nlib/col/service/impl/CartServiceImpl.java +++ b/src/main/java/nlib/col/service/impl/CartServiceImpl.java @@ -1,20 +1,264 @@ -package nlib.col.service.impl; - -import javax.annotation.Resource; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; - -import nlib.col.service.CartService; -import nlib.restful.service.DataApiReqVO; -import nlib.restful.service.DataApiResVO; - -@Service("cartService") -public class CartServiceImpl implements CartService -{ - private static final Logger log = LoggerFactory.getLogger(CartServiceImpl.class); - - @Resource(name="cartDAO") - private CartDAO cartDAO; +package nlib.col.service.impl; + +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import nlib.col.service.CartService; +import nlib.col.service.CollectionVO; +import nlib.util.StringUtil; +import nlib.col.service.CollectionService; + +/** + *
+ * @Class Name : CartServiceImpl.java
+ * 
+ * @Description : 카트관련 기능 서비스 구현 클래스 
+ * 
+ * 
+ * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
+ *
+ * 
+ * + * @ ------------ -------- --------------------------- + * @ 수정일 수정자 수정내용 + * @ ------------ -------- --------------------------- + * @ 2021. 10. 5. KNKIM 최초 생성 + * + * + * @author 이씨플라자 * DIGITALSHIP KNKIM + * @since 2021. 10. 5. + * @version 1.0 + * + */ +@Service("cartService") +public class CartServiceImpl implements CartService +{ + private static final Logger log = LoggerFactory.getLogger(CartServiceImpl.class); + + @Resource(name="cartDAO") + private CartDAO cartDAO; + + @Resource(name = "collectionService") + private CollectionService collectionService; + + /** + * (로그인자용) 로그인한 사용자의 카트 목록을 조회한다. + * + * @param mbInfoId + * @param cartDivCd + * @return + * @throws Exception + */ + public List listCartItems(String mbInfoId, String cartTypeCd) throws Exception { + return cartDAO.listCartItems(mbInfoId, cartTypeCd); + } + + /** + * (비로그인자용) 쿠키에서 카트 목록을 조회한다. + * + * @param request + * @param cartDivCd + * @return + * @throws Exception + */ + public List listCartItemsFromCookie(HttpServletRequest request, String cartDivCd) throws Exception { + return null; + } + + /** + * (로그인자용) 카트 영역 구분코드를 변경한다. (대출 <-> 방문열람) + * + * @param mbInfoId + * @param targetCartItems + * @return + * @throws Exception + */ + public String changeCartType(CollectionVO cartVO) throws Exception { + if(cartVO == null || StringUtil.isEmpty(cartVO.getMbInfoId())) return "회원 정보가 없습니다."; + if(StringUtil.isEmpty(cartVO.getSelItems())) return "변경할 대상 정보가 없습니다."; + int resultCnt = cartDAO.changeCartType(cartVO); + + if(resultCnt > 0) return null; + + return "변경 처리에 실패하였습니다. 관리자에게 문의하여 주시기 바랍니다."; + } + + /** + * (비로그인자용) 카트 영역 구분코드를 변경한다. (대출 <-> 방문열람) + * + * @param request + * @param targetCartItems + * @return + * @throws Exception + */ + public int changeCartTypeFromCookie(HttpServletRequest request, List targetCartItems) throws Exception { + return 0; + } + + /** + * (로그인자용) 카트에 추가한다. + * + * @param cartVO + * @return + * @throws Exception + */ + public String insertCartItem(CollectionVO cartVO) throws Exception { + + cartVO = checkValidCartItem(cartVO); + + if(cartVO.getResultCode().charAt(0) != 'S') return cartVO.getResultMessage(); + + //----------------------------------------------- + // 등록 처리 + //----------------------------------------------- + int resultCnt = cartDAO.insertCartItem(cartVO); + + if(resultCnt > 0) return null; + + return "등록 처리에 실패하였습니다. 관리자에게 문의하여 주시기 바랍니다."; + } + + /** + * 카트에 추가할 수 있는 자료인지 확인하고, 대출/열람 유형을 검증한다. 필요시 대출/열람 유형을 변경하고 리턴한다. + * + * @param cartVO + * @return + * @throws Exception + */ + public CollectionVO checkValidCartItem(CollectionVO cartVO) throws Exception { + + if(cartVO == null) return new CollectionVO("FCART00", "카트에 추가할 자료 정보가 없습니다."); + + //----------------------------------------------- + // 기존에 등록된 자료인지 확인 + //----------------------------------------------- + int existCnt = cartDAO.countCartItem(cartVO); + if(existCnt > 0) { + cartVO.setResult("FCART01", "이미 카트에 등록된 자료입니다."); + return cartVO; + } + + //----------------------------------------------- + // 해당 카트 구분값으로 등록가능한지 여부 체크 + //----------------------------------------------- + CollectionVO searchColVO = new CollectionVO(); + searchColVO.setMasterId(cartVO.getMasterId()); + searchColVO.setMngOrgCd(cartVO.getMngOrgCd()); + searchColVO.setTypeDivCd(cartVO.getTypeDivCd()); + searchColVO.setMbInfoId(cartVO.getMbInfoId()); + CollectionVO collectionVO = collectionService.getItemInfo(searchColVO); + + // 자료 상세 조회 성공한 경우 + if(collectionVO.getResultCode().startsWith("S")) { + // 대출인 경우 + if("1".equals(cartVO.getCartTypeCd())) { + + // 대출불가인 경우 + if("02".equals(collectionVO.getOperOutRangeCd())) { // 대출가능여부 확인 : 02 대출불가 + + // 열람 가능인 경우 열람 처리 + if(!"03".equals(collectionVO.getOperReadRangeCd())) { + cartVO.setCartTypeCd("2"); // 대출가능하지 않으나 열람 가능한 경우, 열람으로 강제 변경 + } else { + cartVO.setResult("FCART02", "대출 및 열람이 불가한 자료입니다."); + return cartVO; + } + } + } + // 열람인 경우 + else if("2".equals(cartVO.getCartTypeCd())) { + + // 열람불가인 경우 + if("03".equals(collectionVO.getOperReadRangeCd())) { // 열람가능여부 확인 : 03 열람불가 + + // 대출가능한 경우, 대출로 처리 + if(!"02".equals(collectionVO.getOperOutRangeCd())) { + cartVO.setCartTypeCd("1"); // 대출가능한 경우, 대출로 강제 변경 + } else { + cartVO.setResult("FCART03", "열람 및 대출이 불가한 자료입니다."); + return cartVO; + } + } + + } + // 카드유형구분이 없는 경우, 대출->열람 우선순위서 설정 + else { + if(!"02".equals(collectionVO.getOperOutRangeCd())) { // 대출가능여부 확인 : 02 대출불가 + cartVO.setCartTypeCd("1"); // 대출가능한 경우, 대출로 설정 + } else if(!"03".equals(collectionVO.getOperReadRangeCd())) { // 열람가능여부 확인 : 03 열람불가 + cartVO.setCartTypeCd("2"); // 열람가능한 경우, 열람으로 설정 + } else { + cartVO.setResult("FCART04", "대출 및 열람이 불가한 자료입니다."); + return cartVO; + } + } + } + // 자료 상세 조회 실패한 경우, 처리결과 메시지를 리턴한다. + else { + cartVO.setResult("FCART05", collectionVO.getResultMessage()); + return cartVO; + } + + cartVO.setResult("S", null); + return cartVO; + + } + + /** + * (비로그인자용) 카트에 추가한다. + * + * @param cartVO + * @return + * @throws Exception + */ + public String insertCartItemToCookie(HttpServletRequest request, CollectionVO cartVO) throws Exception { + return null; + } + + /** + * (로그인자용) 카트에서 선택된 자료들을 삭제한다. + * + * @param targetCartItems + * @return + * @throws Exception + */ + public String deleteCartItems(CollectionVO cartVO) throws Exception { + if(cartVO == null || StringUtil.isEmpty(cartVO.getMbInfoId())) return "회원 정보가 없습니다."; + if(StringUtil.isEmpty(cartVO.getSelItems())) return "삭제할 대상 정보가 없습니다."; + int resultCnt = cartDAO.deleteCartItems(cartVO); + + if(resultCnt > 0) return null; + return "변경 처리에 실패하였습니다. 관리자에게 문의하여 주시기 바랍니다."; + + } + + /** + * (비로그인자용) 카트에서 선택된 자료들을 삭제한다. + * + * @param targetCartItems + * @return + * @throws Exception + */ + public String deleteCartItems(HttpServletRequest request, List targetCartItems) throws Exception { + return null; + } + + /** + * 비로그인시 카트에 저장된 내역을 로그인한 후 해당 사용자의 카트로 저장하고, 쿠키 카트내용은 초기화한다. + * + * @param mbInfoId + * @param request + * @return + * @throws Exception + */ + public int saveCartItemsOfNonMember(String mbInfoId, HttpServletRequest request) throws Exception { + return 0; + } + } \ No newline at end of file diff --git a/src/main/java/nlib/col/web/CartController.java b/src/main/java/nlib/col/web/CartController.java index de492be2..c79966dc 100644 --- a/src/main/java/nlib/col/web/CartController.java +++ b/src/main/java/nlib/col/web/CartController.java @@ -1,48 +1,231 @@ -package nlib.col.web; - -import javax.annotation.Resource; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Controller; - -import nlib.cmm.NlibCommonController; -import nlib.cmm.service.CodeService; -import nlib.cmm.service.NlibProperty; -import nlib.col.service.RentService; - -/** - *
- * @Class Name : CartController.java
- * 
- * @Description : 소장자료 카트 컨트롤러
- * 
- * 
- * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
- *
- * 
- * - * @ ------------ -------- --------------------------- - * @ 수정일 수정자 수정내용 - * @ ------------ -------- --------------------------- - * @ 2021. 10. 01. JSYOO 최초 생성 - * - * - * @author 이씨플라자 * DIGITALSHIP JSYOO - * @since 2021. 10. 01. - * @version 1.0 - * - */ -@Controller -public class CartController extends NlibCommonController -{ - private static final Logger log = LoggerFactory.getLogger(CartController.class); - static final String DEFUALT_PAGE_SIZE = NlibProperty.getProperty("list.paging.page.size"); - - @Resource(name = "rentService") - private RentService rentService; - - @Resource(name = "codeService") - private CodeService codeService; - +package nlib.col.web; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +import nlib.bbs.service.ArticleVO; +import nlib.cmm.NlibCommonController; +import nlib.cmm.service.CodeService; +import nlib.cmm.service.NlibProperty; +import nlib.col.service.CartService; +import nlib.col.service.CollectionService; +import nlib.col.service.CollectionVO; +import nlib.user.service.NlibLoginVO; +import nlib.util.StringUtil; + +/** + *
+ * @Class Name : CartController.java
+ * 
+ * @Description : 소장자료 카트 컨트롤러
+ * 로그인하지 않은 사용자도 카트 추가 가능하며, 추가 시 정보가 저장되는 영역은 다음과 같다.
+ * - 비회원 카트정보 쿠키 저장 
+ * - 회원 카트정보 DB 저장 
+ * 
+ * 
+ * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
+ *
+ * 
+ * + * @ ------------ -------- --------------------------- + * @ 수정일 수정자 수정내용 + * @ ------------ -------- --------------------------- + * @ 2021. 10. 5. KNKIM 최초 생성 + * + * + * @author 이씨플라자 * DIGITALSHIP KNKIM + * @since 2021. 10. 5. + * @version 1.0 + * + */ +@Controller +public class CartController extends NlibCommonController +{ + private static final Logger log = LoggerFactory.getLogger(CartController.class); + static final String DEFUALT_PAGE_SIZE = NlibProperty.getProperty("list.paging.page.size"); + + @Resource(name = "cartService") + private CartService cartService; + + @Resource(name = "collectionService") + private CollectionService collectionService; + + /** + * 카트 목록을 조회한다. + * 로그인되지 않은 사용자의 경우, 쿠키에 저장된 값으로 처리한다. + * + * @param request + * @param cartTypeCd + * @param model + * @return + * @throws Exception + */ + @RequestMapping("/cart/listCartItems.do") + public String listCartItems(HttpServletRequest request, String message, String cartTypeCd, ModelMap model) throws Exception { + + if(StringUtil.isEmpty(cartTypeCd)) cartTypeCd = "0"; // 대출 기본 설정 + + String mbInfoId = getMbInfoId(request); + + List list = null; + + // 카트 목록 가져오기 + if(StringUtil.isEmpty(mbInfoId)) { + // 쿠키에서 값 가져오기 + list = cartService.listCartItemsFromCookie(request, cartTypeCd); + } else { + list = cartService.listCartItems(mbInfoId, cartTypeCd); + } + + // 카트 목록 자료에 대한 상세자료 설정 + collectionService.setDetailInfoForList(list); + + model.addAttribute("list", list); + model.addAttribute("cartTypeCd", cartTypeCd); + model.addAttribute("message", message); + + return "nlib/cart/listCartItems"; + } + + /** + * 카트 영역 구분코드를 변경한다. (대출 <-> 방문열람) + * + * @param request + * @param cartVO + * @param model + * @return + * @throws Exception + */ + @RequestMapping("/cart/changeCartType.do") + public String changeCartType(HttpServletRequest request, CollectionVO cartVO, ModelMap model) throws Exception { + + String message = null; + String mbInfoId = getMbInfoId(request); + + if(StringUtil.isEmpty(mbInfoId)) { + cartService.changeCartTypeFromCookie(request, null); + } else { + cartVO.setMbInfoId(getMbInfoId(request)); + message = cartService.changeCartType(cartVO); + } + + if(message == null) message = "정상적으로 변경되었습니다."; + model.addAttribute("message", message); + return "redirect:/cart/listCartItems.do"; + } + + /** + * 카트에 추가한다. + * + * @param request + * @param cartVO + * @param model + * @return + * @throws Exception + */ + @RequestMapping("/cart/insertCartItemAjax.do") + public ResponseEntity insertCartItemAjax(HttpServletRequest request, @RequestBody CollectionVO cartVO, ModelMap model) throws Exception { + + log.debug("insertCartItemAjax > masterId = " + cartVO.getMasterId()); + + String code = "S"; + String message = null; + + String mbInfoId = getMbInfoId(request); + + int changedCnt = 0; + + try { + + // 로그인한 경우 + if(!StringUtil.isEmpty(mbInfoId)) { + log.debug("insertCartItemAjax > masterId = " + cartVO.getMasterId()); + log.debug("insertCartItemAjax > cartDivCd = " + cartVO.getCartTypeCd()); + cartVO.setMbInfoId(mbInfoId); + cartVO.setRegId(mbInfoId); + message = cartService.insertCartItem(cartVO); + + } + // 비회원인 경우 + else { + message = cartService.insertCartItemToCookie(request, cartVO); + } + + if(message == null) { + code = "S"; + message = "정상적으로 추가되었습니다."; + } else { + code = "F"; + } + + } catch(Exception e) { + code = "F"; + message = "등록되지 않았습니다. : " + e.toString(); + } + + + //------------------------------- + // JSON변환 응답 처리 + //------------------------------- + // JS-GRID 페이징 처리를 포함한 응답값 처리 + // {data: [{...}], + // itemsCount: 255 + // } + HashMap retMap = new HashMap(); + retMap.put("code", code); + retMap.put("message", message); + + return makeResponseEntityJson(retMap); + } + + @RequestMapping("/cart/deleteCartItems.do") + public String deleteCartItems(HttpServletRequest request, CollectionVO cartVO, ModelMap model) throws Exception { + String mbInfoId = getMbInfoId(request); + cartVO.setMbInfoId(mbInfoId); + String message = cartService.deleteCartItems(cartVO); + + if(message == null) message = "정상적으로 삭제되었습니다."; + model.addAttribute("message", StringUtil.encodeUrl(message)); + return "redirect:/cart/listCartItems.do"; + } + + /** + * 비로그인시 카트에 저장된 내역을 로그인한 후 해당 사용자의 카트로 저장하고, 쿠키 카트내용은 초기화한다. + * + * @param request + * @param model + * @return + * @throws Exception + */ + @RequestMapping("/cart/saveCartItemsOfNonMemberAjax") + public String saveCartItemsOfNonMemberAjax(HttpServletRequest request, ModelMap model) throws Exception { + + String message = null; + String mbInfoId = getMbInfoId(request); + int resultCnt = 0; + if(StringUtil.isEmpty(mbInfoId)) { + message = "잘못된 접근입니다. 로그인 후, 이용가능합니다."; + } else { + resultCnt = cartService.saveCartItemsOfNonMember(mbInfoId, request); + } + + model.addAttribute("message", message); + model.addAttribute("resultCnt", resultCnt); + + return "nlib/col/saveCartItemsOfNonMember"; + } + } \ No newline at end of file diff --git a/src/main/java/nlib/restful/service/DataApiInterface.java b/src/main/java/nlib/restful/service/DataApiInterface.java index f730e420..e487ff79 100644 --- a/src/main/java/nlib/restful/service/DataApiInterface.java +++ b/src/main/java/nlib/restful/service/DataApiInterface.java @@ -1,5 +1,6 @@ package nlib.restful.service; +import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -114,7 +115,19 @@ public interface DataApiInterface { if(reqVO.hasInfo()) { HashMap info = reqVO.getInfo(); for(String key : info.keySet()) { - Object val = info.get(key); + Object val = null; + if(DataApiVO.XML_EL_NAME_MB_INFO_ID.equals(key)) { + val = reqVO.getEncMbInfoId(); + } else { + val = info.get(key); + } + String encVal = null; + try { + encVal = URLEncoder.encode((String)val, "UTF-8"); + } catch(Exception e) { + log.error("makeRequestParamUrl > " + e.toString()); + continue; + } builder.queryParam(key, (String)val); } } @@ -138,9 +151,10 @@ public interface DataApiInterface { } // if(listMap != null) } // if(reqVO.hasList()) - log.debug("makeRequestParamUrl > queryUrl = " + builder.toUriString()); + String retUrl = builder.toUriString(); + log.debug("makeRequestParamUrl > queryUrl = " + retUrl); - return builder.toUriString(); + return retUrl; } /** diff --git a/src/main/java/nlib/restful/service/DataApiVO.java b/src/main/java/nlib/restful/service/DataApiVO.java index 061d8236..b8ca9eb3 100644 --- a/src/main/java/nlib/restful/service/DataApiVO.java +++ b/src/main/java/nlib/restful/service/DataApiVO.java @@ -229,13 +229,13 @@ public class DataApiVO { // 사용자ID 처리 관련 //-------------------------------------------------------------- public String getMbInfoId() { - return getInfoItem("XML_EL_NAME_MB_INFO_ID"); + return getInfoItem(XML_EL_NAME_MB_INFO_ID); } public String getEncMbInfoId() { - return AriaCrypto.encode(getInfoItem("XML_EL_NAME_MB_INFO_ID")); + return AriaCrypto.encode(getInfoItem(XML_EL_NAME_MB_INFO_ID)); } public void setMbInfoId(String mbInfoId) { - putInfoItem("XML_EL_NAME_MB_INFO_ID", mbInfoId); + putInfoItem(XML_EL_NAME_MB_INFO_ID, mbInfoId); } //-------------------------------------------------------------- diff --git a/src/main/resources/egovframework/mapper/nlib/col/CartDAO_SQL.xml b/src/main/resources/egovframework/mapper/nlib/col/CartDAO_SQL.xml new file mode 100644 index 00000000..9a65915c --- /dev/null +++ b/src/main/resources/egovframework/mapper/nlib/col/CartDAO_SQL.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + \ 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 new file mode 100644 index 00000000..15723240 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/nlib/cart/listCartItems.jsp @@ -0,0 +1,311 @@ +<% +/** + *
+ * @Class Name : listNotices.jsp
+ * 
+ * @Description : 공지사항 목록을 조회한다.
+ * 
+ * 
+ * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
+ *
+ * 
+ * + * @ ------------ -------- --------------------------- + * @ 수정일 수정자 수정내용 + * @ ------------ -------- --------------------------- + * @ 2021. 6. 15. KNKIM 최초 생성 + * + * + * @author 이씨플라자 * DIGITALSHIP KNKIM + * @since 2021. 6. 15. + * @version 1.0 + * + */ + %> +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + +카트 + + + + +${pageTitle} + + + + + + + + + + + +

${pageTitle }

+ +메시지 : ${message} + 
+
+ + cartTypeCd = + mngOrgCd = + selItems = + message = ${message } +
+ + 전체 + + + 전체 + + +   |   + + + 대출 + + + 대출 + + +   |   + + + 열람 + + + 열람 + + + +
+ ---------------------------------- +
+ 1. 카트 > 2.신청/예약확인 > 3.신청/예약완료 +
+ ---------------------------------- +
+ + + + + + + + +  
+  
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ selMngOrgCd + + ${cart.mngOrgNm } () +
+ chk_all_${cart.mngOrgCd } + 선택ID썸네일/관심제목이용상태반납예정일대출방문열람
+ chk_item_${cart.mngOrgCd } + ${cart.mbCartId } : ${cart.interestYn }${cart.title } + ${cart.mngOrgCd } + + ${cart.useStatus }
${cart.useStatusNm }
${cart.rtnExpctDd }${cart.operOutRangeCd } ${cart.operOutRangeNm }${cart.operReadRangeCd } ${cart.operReadRangeNm }
+  
+  
+ +
+ + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/tiles/inc/header.jsp b/src/main/webapp/WEB-INF/tiles/inc/header.jsp index a2d08428..eb3a3836 100644 --- a/src/main/webapp/WEB-INF/tiles/inc/header.jsp +++ b/src/main/webapp/WEB-INF/tiles/inc/header.jsp @@ -33,6 +33,9 @@ String councilNm = (String)session.getAttribute("councilCd");
  • ID/PW찾기
  • 회원가입
  • + +
  • 카트
  • +
  • diff --git a/src/main/webapp/js/cart.js b/src/main/webapp/js/cart.js new file mode 100644 index 00000000..c7c7f5ab --- /dev/null +++ b/src/main/webapp/js/cart.js @@ -0,0 +1,95 @@ + +/* + * + * NLIB : 카트 JavaScript + * + * + */ + +function fn_addRentCart(masterId, mngOrgCd, typeDivCd, useStatus) { + + /* useStatus + 01 : 이용가능 + 02 : 대출중 (대기자 0명) + 03 : 대출중 (대기자 1명) + 04 : 열람대기(대출가능) + 05 : 이용가능 + 06 : 열람대기(대출불가능) + 07 : 온라인열람만" + */ + fn_addRentCartItem(masterId, mngOrgCd, typeDivCd, useStatus + , function(data) { + if(data.code == "S") { + if(confirm(data.message + "\n카트로 이동하시겠습니까?")) { + fn_gotoCart(); + } + } else { + alert(data.message); + } + } + , function(error) { + alert(error.message); + } + ); + + return false; +} + +function fn_gotoCart() { + location.href = "/cart/listCartItems.do"; +} + +function fn_addRentCartItem(masterId, mngOrgCd, typeDivCd, useStatus, resolve, reject) { + + + var cartTypeCd = null; + + if(masterId == "undefined" || masterId == "") { + reject(new Error("선택된 자료 정보가 없습니다.")); + return; + } + + if(useStatus == "undefined" || useStatus == "") { + reject(new Error("선택된 자료의 상태 정보를 확인할 수 없습니다.")); + return; + } + + if("01" <= useStatus && useStatus <= "04") { + cartTypeCd = "1"; // 대출 + } else if("05" <= useStatus && useStatus <= "06") { + cartTypeCd = "2"; // 방문열람 + } else if("07" == useStatus) { + reject(new Error("해당 자료는 온라인열람만 가능한 자료입니다. 온라인 열람을 통해 자료를 조회하시기 바랍니다.")); + return null; + } else { + reject(new Error("해당 자료의 상태를 확인할 수 없습니다.")); + return null; + } + + $.ajax({ + url : "/cart/insertCartItemAjax.do", + contentType: "application/json; charset=utf-8", + dataType: "json", + type : "POST", + data: JSON.stringify({ + masterId : masterId, + mngOrgCd : mngOrgCd, + typeDivCd : typeDivCd, + cartTypeCd : cartTypeCd + }), + success : function(data) { + resolve(JSON.parse(data)); + }, + error : function(error) { + reject(error); + } + }); +} + +function fn_addReserveCart() { + alert("카트 추가 - 로그인"); +} + +function fn_deleteCart() { + alert("카트 삭제"); +} \ No newline at end of file