diff --git a/src/main/java/nlib/col/service/CartService.java b/src/main/java/nlib/col/service/CartService.java index 114663f4..b623beb2 100644 --- a/src/main/java/nlib/col/service/CartService.java +++ b/src/main/java/nlib/col/service/CartService.java @@ -84,16 +84,6 @@ public interface CartService */ public String deleteCartItemsFromCookie(HttpServletRequest request, HttpServletResponse response, CollectionVO cartVO) throws Exception; - /** - * 비로그인시 카트에 저장된 내역을 로그인한 후 해당 사용자의 카트로 저장하고, 쿠키 카트내용은 초기화한다. - * - * @param mbInfoId - * @param request - * @return - * @throws Exception - */ - public int saveCartItemsOfNonMember(String mbInfoId, HttpServletRequest request) throws Exception; - /** * 쿠키 카트(비로그인 상태의 카트정보) 존재하는 경우, 해당 사용자 카트(DB)로 등록한 후, 쿠키 카트 삭제한다. @@ -106,4 +96,25 @@ public interface CartService */ public int mergeCart(String mbInfoId, HttpServletRequest request, HttpServletResponse response) throws Exception; + /** + * 쿠키 카트(비로그인 상태의 카트정보)에 존재하는 자료 개수를 리턴한다. + * + * @param request + * @param response + * @param cartTypeCd + * @return + * @throws Exception + */ + public int countCartItemsFromCookie(HttpServletRequest request, HttpServletResponse response, String cartTypeCd) throws Exception; + + /** + * 사용자 카트의 자료 개수를 리턴한다. + * + * @param mbInfoId + * @param cartTypeCd + * @return + * @throws Exception + */ + public int countCartItems(String mbInfoId, String cartTypeCd) throws Exception; + } \ No newline at end of file diff --git a/src/main/java/nlib/col/service/CollectionService.java b/src/main/java/nlib/col/service/CollectionService.java index e4b5f3f0..cae817b7 100644 --- a/src/main/java/nlib/col/service/CollectionService.java +++ b/src/main/java/nlib/col/service/CollectionService.java @@ -44,4 +44,17 @@ public interface CollectionService { * @throws Exception */ public List setDetailInfoForList(List list) throws Exception; + + + /** + * 목록의 자료정보에 상세정보를 조회하여 설정한 후 리턴한다. + * + * @param list + * @param mbInfoId + * @param defaultThumbnailUrl + * @return + * @throws Exception + */ + public List setDetailInfoForList(List list, String mbInfoId, String defaultThumbnailUrl) throws Exception; + } diff --git a/src/main/java/nlib/col/service/CollectionVO.java b/src/main/java/nlib/col/service/CollectionVO.java index a1f49684..ad308158 100644 --- a/src/main/java/nlib/col/service/CollectionVO.java +++ b/src/main/java/nlib/col/service/CollectionVO.java @@ -32,9 +32,6 @@ import nlib.util.StringUtil; @JsonIgnoreProperties(ignoreUnknown = true) public class CollectionVO extends PagingVO { - // 기본 썸네일 (썸네일 존재하지 않는 경우, default url) - public final String THUMBNAIL_IMG_URL = NlibProperty.getString("item.thumbnail.image.url"); - //-------------------------------------------- // 자료항목 //-------------------------------------------- @@ -103,6 +100,7 @@ public class CollectionVO extends PagingVO { private String assetLink; /* 자산링크 */ private String regId; /* 등록자ID */ private String modId; /* 변경자ID */ + private String mUseYn; /* 관심여부 */ //-------------------------------------------- // 기타 연관기능 항목 @@ -183,11 +181,15 @@ public class CollectionVO extends PagingVO { this.title = title; } public String getRprsThumbUrl() { - return rprsThumbUrl == null ? THUMBNAIL_IMG_URL : rprsThumbUrl; + return rprsThumbUrl; } public void setRprsThumbUrl(String rprsThumbUrl) { this.rprsThumbUrl = rprsThumbUrl; } + public void setRprsThumbUrl(String rprsThumbUrl, String defaultImgUrl) { + if(StringUtil.isEmpty(rprsThumbUrl) || !rprsThumbUrl.startsWith("/")) this.rprsThumbUrl = defaultImgUrl; + else this.rprsThumbUrl = rprsThumbUrl; + } public String getUseYn() { return useYn; } @@ -691,5 +693,13 @@ public class CollectionVO extends PagingVO { this.rtnDd = rtnDd; } + public String getMUseYn() { + return StringUtil.isEmpty(mUseYn) ? "N" : mUseYn; + } + + public void setMUseYn(String mUseYn) { + this.mUseYn = mUseYn; + } + } diff --git a/src/main/java/nlib/col/service/impl/CartDAO.java b/src/main/java/nlib/col/service/impl/CartDAO.java index 6487331f..60c4e430 100644 --- a/src/main/java/nlib/col/service/impl/CartDAO.java +++ b/src/main/java/nlib/col/service/impl/CartDAO.java @@ -22,4 +22,6 @@ public interface CartDAO { public int changeCartType(CollectionVO cartVO) throws Exception; + public int countCartItems(@Param("mbInfoId") String mbInfoId, @Param("cartTypeCd") String cartTypeCd) 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 299ed57d..c4b7c4d9 100644 --- a/src/main/java/nlib/col/service/impl/CartServiceImpl.java +++ b/src/main/java/nlib/col/service/impl/CartServiceImpl.java @@ -77,29 +77,26 @@ public class CartServiceImpl implements CartService * @throws Exception */ public List listCartItemsFromCookie(HttpServletRequest request, HttpServletResponse response, String cartTypeCd) throws Exception { - Cookie[] cookies = request.getCookies(); - if(cookies == null || cookies.length < 1) return null; + if(StringUtil.isEmpty(cartTypeCd)) return null; List list = new ArrayList(); - String targetCookieName = CART_COOKIE_NAME + (cartTypeCd == null || cartTypeCd.equals("0") ? "" : cartTypeCd); + String targetCookieName = CART_COOKIE_NAME + cartTypeCd; - 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); - } - } + // _NLIB_COOKIE1=:masterId:masterId: + String cartStr = getCookie(request, targetCookieName); + if(StringUtil.isEmpty(cartStr)) return null; + + String[] cartItemsStr = cartStr.split(":"); + for(String itemStr : cartItemsStr) { + if(StringUtil.isEmpty(itemStr)) continue; + CollectionVO vo = CollectionVO.createWithMasterId(targetCookieName.substring(targetCookieName.length()-2), itemStr); + vo.setMbCartId(vo.getMasterId()); // 비회원 쿠키 카트의 경우, 카트ID를 자료ID로 대체한다. + if(vo != null) list.add(vo); } + if(list.size() < 1) return null; + return list; } @@ -525,18 +522,6 @@ public class CartServiceImpl implements CartService log.debug("updateSelItemsForDB > " + cartVO.getSelItems()); } - /** - * 비로그인시 카트에 저장된 내역을 로그인한 후 해당 사용자의 카트로 저장하고, 쿠키 카트내용은 초기화한다. - * - * @param mbInfoId - * @param request - * @return - * @throws Exception - */ - public int saveCartItemsOfNonMember(String mbInfoId, HttpServletRequest request) throws Exception { - return 0; - } - /** * 쿠키 카트(비로그인 상태의 카트정보) 존재하는 경우, 해당 사용자 카트(DB)로 등록한 후, 쿠키 카트 삭제한다. * @@ -570,4 +555,46 @@ public class CartServiceImpl implements CartService return mergeCnt; } + + /** + * 쿠키 카트(비로그인 상태의 카트정보)에 존재하는 자료 개수를 리턴한다. + * + * @param request + * @param response + * @param cartTypeCd + * @return + * @throws Exception + */ + public int countCartItemsFromCookie(HttpServletRequest request, HttpServletResponse response, String cartTypeCd) throws Exception { + + if(StringUtil.isEmpty(cartTypeCd)) return 0; + + String targetCookieName = CART_COOKIE_NAME + cartTypeCd; + + String cartStr = getCookie(request, targetCookieName); + if(StringUtil.isEmpty(cartStr)) return 0; + + String[] cartItemsStr = cartStr.split(":"); + int retCnt = 0; + for(String itemStr : cartItemsStr) { + if(StringUtil.isEmpty(itemStr)) continue; + retCnt++; + } + + return retCnt; + } + + + /** + * 사용자 카트의 자료 개수를 리턴한다. + * + * @param mbInfoId + * @param cartTypeCd + * @return + * @throws Exception + */ + public int countCartItems(String mbInfoId, String cartTypeCd) throws Exception { + return cartDAO.countCartItems(mbInfoId, cartTypeCd); + } + } diff --git a/src/main/java/nlib/col/service/impl/CollectionServiceImpl.java b/src/main/java/nlib/col/service/impl/CollectionServiceImpl.java index d8b74d94..628338ad 100644 --- a/src/main/java/nlib/col/service/impl/CollectionServiceImpl.java +++ b/src/main/java/nlib/col/service/impl/CollectionServiceImpl.java @@ -96,110 +96,25 @@ public class CollectionServiceImpl implements CollectionService { * @return * @throws Exception */ - public List setDetailInfoForList_BK(List list) throws Exception { - - if(list == null || list.size() < 1) return list; - - final int MAX_CNT_FOR_ONE_QUERY = 10; - int cnt = list.size(); - HashMap orgCdMasterIdMap = new HashMap(); - HashMap collectionMap = new HashMap(); - String mbInfoId = null; - - // 문화원별 자료ID 항목값 생성 - for(int i=0; i 0) jsonMasterId += ","; - jsonMasterId += "{'masterId':'" + vo.getMasterId() + "}"; - - orgCdMasterIdMap.put(orgCd, jsonMasterId); - } - - // 문화원별 API 요청 처리 - for(String orgCd : orgCdMasterIdMap.keySet()) { - - String jsonMasterId = orgCdMasterIdMap.get(orgCd); - if(StringUtil.isEmpty(jsonMasterId)) continue; - - jsonMasterId = "[" + jsonMasterId + "]"; - - // API 호출 - DataApiReqVO reqVO = new DataApiReqVO("/uac/service/nlib/col/listItemInfo", HttpMethod.GET); - reqVO.putInfoItem("mngOrgCd", orgCd); - reqVO.putInfoItem("jsonMasterId", jsonMasterId); - - reqVO.setMbInfoId(mbInfoId); // 통신 시, 암호화되어 송수신됨 - DataApiResVO resVO = dataApi.request(reqVO); - - // 결과 처리 - if(resVO.getResultCode().charAt(0) == 'S') { - List> recordList = resVO.getList("record"); - if(recordList == null || recordList.size() < 1) continue; - - for(HashMap record : recordList) { - CollectionVO cVO = (CollectionVO)XmlConverter.convertMapToObject(record, CollectionVO.class); - if(cVO != null && StringUtil.isNotEmpty(cVO.getMasterId())) { - collectionMap.put(cVO.getMasterId(), cVO); - } - } - } else { - log.error("setDetailInfoForCartItems > 소장자료 다건 메타정보 조회 오류(API) : " + resVO.getResultCode() + " : " + resVO.getResultMessage()); - } - } - - // 목록에 업데이트 설정 - for(int i=0; i setDetailInfoForList(List list) throws Exception { + return setDetailInfoForList(list, null, null); } /** * 목록의 자료정보에 상세정보를 조회하여 설정한 후 리턴한다. * * @param list + * @param mbInfoId + * @param defaultThumbnailUrl * @return * @throws Exception */ - public List setDetailInfoForList(List list) throws Exception { + public List setDetailInfoForList(List list, String mbInfoId, String defaultThumbnailUrl) throws Exception { if(list == null || list.size() < 1) return list; int cnt = list.size(); HashMap collectionMap = new HashMap(); - String mbInfoId = null; // 문화원별 API 요청 처리 String jsonMasterId = ""; @@ -254,18 +169,19 @@ public class CollectionServiceImpl implements CollectionService { vo.setSubjectNm (cVO.getSubjectNm()); vo.setOrgNm (cVO.getOrgNm()); vo.setCreatYyyy (cVO.getCreatYyyy()); - vo.setRprsThumbUrl (cVO.getRprsThumbUrl()); + vo.setRprsThumbUrl (cVO.getRprsThumbUrl(), defaultThumbnailUrl); vo.setInterfaceId (cVO.getInterfaceId()); vo.setOpenDivCd (cVO.getOpenDivCd()); vo.setOperReadRangeCd(cVO.getOperReadRangeCd()); vo.setOperOutRangeCd (cVO.getOperOutRangeCd()); vo.setUseStatus (cVO.getUseStatus()); - vo.setRtnExpctDd (cVO.getRtnExpctDd()); + vo.setRtnExpctDd (StringUtil.formatDateStr(cVO.getRtnExpctDd(), "-")); vo.setAwaiterCnt (cVO.getAwaiterCnt()); vo.setBookLentPsblYn (cVO.getBookLentPsblYn()); vo.setRsrvPsblYn (cVO.getRsrvPsblYn()); vo.setReqPsblYn (cVO.getReqPsblYn()); vo.setInterestYn (cVO.getInterestYn()); + vo.setMUseYn (cVO.getMUseYn()); // DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD // API에 존재하지 않을 경우, 추가 DB 조회 diff --git a/src/main/java/nlib/col/web/CartController.java b/src/main/java/nlib/col/web/CartController.java index c2aa5582..8a376d19 100644 --- a/src/main/java/nlib/col/web/CartController.java +++ b/src/main/java/nlib/col/web/CartController.java @@ -80,6 +80,8 @@ public class CartController extends NlibCommonController String mbInfoId = getMbInfoId(request); List list = null; + int cartTypeCd1Cnt = 0; // 대출 카트건수 + int cartTypeCd2Cnt = 0; // 열람 카트건수 // 카트 목록 가져오기 if(StringUtil.isEmpty(mbInfoId)) { @@ -87,21 +89,33 @@ public class CartController extends NlibCommonController list = cartService.listCartItemsFromCookie(request, response, cartTypeCd); // 카트 목록 자료에 대한 상세자료 설정 - collectionService.setDetailInfoForList(list); + collectionService.setDetailInfoForList(list, null, NlibProperty.getString("thumbnail.image.url.small")); - // 문화원별 정령 처리 + // 문화원별 정렬 처리 list = sortCollectionListByMngOrgCd(list); + + // 카트 건수 + cartTypeCd1Cnt = cartService.countCartItemsFromCookie(request, response, "1"); + cartTypeCd2Cnt = cartService.countCartItemsFromCookie(request, response, "2"); + } else { list = cartService.listCartItems(mbInfoId, cartTypeCd); // 카트 목록 자료에 대한 상세자료 설정 - collectionService.setDetailInfoForList(list); + collectionService.setDetailInfoForList(list, getMbInfoId(request), NlibProperty.getString("thumbnail.image.url.small")); + + // 카트 건수 + cartTypeCd1Cnt = cartService.countCartItems(mbInfoId, "1"); + cartTypeCd2Cnt = cartService.countCartItems(mbInfoId, "2"); } - if(StringUtil.isNotEmpty(message) && message.startsWith("%")) { message = StringUtil.decodeUrl(message); } + + model.addAttribute("cartTypeCd1Cnt", cartTypeCd1Cnt); + model.addAttribute("cartTypeCd2Cnt", cartTypeCd2Cnt); + model.addAttribute("list", list); model.addAttribute("cartTypeCd", cartTypeCd); model.addAttribute("message", message); diff --git a/src/main/java/nlib/util/StringUtil.java b/src/main/java/nlib/util/StringUtil.java index d1bcd04d..bc1f0065 100644 --- a/src/main/java/nlib/util/StringUtil.java +++ b/src/main/java/nlib/util/StringUtil.java @@ -36,6 +36,28 @@ import org.slf4j.LoggerFactory; * @version 1.0 * */ +/** + *
+ * @Class Name : StringUtil.java
+ * 
+ * @Description : 
+ * 
+ * 
+ * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
+ *
+ * 
+ * + * @ ------------ -------- --------------------------- + * @ 수정일 수정자 수정내용 + * @ ------------ -------- --------------------------- + * @ 2021. 10. 25. KNKIM 최초 생성 + * + * + * @author 이씨플라자 * DIGITALSHIP KNKIM + * @since 2021. 10. 25. + * @version 1.0 + * + */ public class StringUtil extends StringUtils { private static final Logger log = LoggerFactory.getLogger(StringUtil.class); @@ -238,6 +260,28 @@ public class StringUtil extends StringUtils { return str; } + + /** + * 날짜 문자열(YYYYMMDD)을 받아서 화면 출력용 날짜 형식 문자열(YYYY-MM-DD)로 리턴한다. + * + * @param dateStr + * @param defaultStr + * @return + */ + public static String formatDateStr(String dateStr, String defaultStr) { + + if(isEmpty(dateStr)) return defaultStr; + + String tmpDateStr = dateStr.trim(); + switch(tmpDateStr.length()) { + case 4 : return dateStr; // 연도만 있는 경우 + case 6 : return tmpDateStr.substring(0, 4) + "-" + tmpDateStr.substring(4); // YYYY-MM + case 8 : return tmpDateStr.substring(0, 4) + "-" + tmpDateStr.substring(4, 6) + "-" + tmpDateStr.substring(6); // YYYY-MM-DD + } + + return defaultStr; + } + /** * 이메일 masking 후 리턴
* 변환 실패시 입력값 그대로 리턴
* 이메일 아이디 앞 2자리 노출
*/ public static String maskEmail(String email){ try{ @@ -284,4 +328,5 @@ public class StringUtil extends StringUtils { catch (Exception e){ } return name; } + } 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 e83e04e8..8635a4fd 100644 --- a/src/main/resources/egovframework/mapper/nlib/col/CartDAO_SQL.xml +++ b/src/main/resources/egovframework/mapper/nlib/col/CartDAO_SQL.xml @@ -29,6 +29,18 @@ AND IFNULL(A.CART_PROC_DIV_CD, 'N') = 'N' ORDER BY B.MNG_ORG_CD + + @@ -200,10 +235,10 @@ $(document).ready(function() {
-
+
@@ -214,6 +249,7 @@ $(document).ready(function() { + @@ -242,21 +278,32 @@ $(document).ready(function() { +
${cart.interestYn } - - 즐겨찾기 아이콘 - 즐겨찾기 아이콘 - - ${cart.rprsThumbUrl } + + + + + + 즐겨찾기 아이콘 + 즐겨찾기 아이콘 + + + + + 즐겨찾기 아이콘 + 즐겨찾기 아이콘 + + +
- - + 온라인열람 @@ -264,17 +311,17 @@ $(document).ready(function() { 대출 - + 방문열람
-
${cart.mbCartId }${cart.title } ${cart.masterId }${cart.mngOrgCd }
+
-

${cart.useStatusNm }

+
poss imposs">

${cart.useStatusNm }

${cart.rtnExpctDd }
-
${cart.operOutRangeNm }
-
${cart.operReadRangeNm }
+
poss imposs">${cart.operOutRangeNm }
+
poss imposs">${cart.operReadRangeNm }
@@ -284,7 +331,26 @@ $(document).ready(function() { - + + + + +
+
+
+
자료정보
+
이용상태
+
반납예정일
+
대출
+
방문열람
+
+
+
카트에 저장된 자료가 없습니다.
+
+
+
+ +
@@ -299,15 +365,19 @@ $(document).ready(function() {
- + - +
+
+ + +
diff --git a/src/main/webapp/images/thumbnail/noimage-b.jpg b/src/main/webapp/images/thumbnail/noimage-b.jpg new file mode 100644 index 00000000..a8789acf Binary files /dev/null and b/src/main/webapp/images/thumbnail/noimage-b.jpg differ diff --git a/src/main/webapp/images/thumbnail/noimage-m.jpg b/src/main/webapp/images/thumbnail/noimage-m.jpg new file mode 100644 index 00000000..b5b11848 Binary files /dev/null and b/src/main/webapp/images/thumbnail/noimage-m.jpg differ diff --git a/src/main/webapp/images/thumbnail/noimage-s.jpg b/src/main/webapp/images/thumbnail/noimage-s.jpg new file mode 100644 index 00000000..3c25fbdc Binary files /dev/null and b/src/main/webapp/images/thumbnail/noimage-s.jpg differ