카트 기능 개발 중간백업 - 회원용 DB 카트 기능 개발

This commit is contained in:
KNKIM 2021-10-08 17:08:02 +09:00
parent 43b1981de8
commit 655b326d63
10 changed files with 1140 additions and 96 deletions

View File

@ -1,10 +1,104 @@
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<CollectionVO> listCartItems(String mbInfoId, String cartDivCd) throws Exception;
/**
* (비로그인자용) 쿠키에서 카트 목록을 조회한다.
*
* @param request
* @param cartDivCd
* @return
* @throws Exception
*/
public List<CollectionVO> 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<CollectionVO> 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<CollectionVO> targetCartItems) throws Exception;
/**
* 비로그인시 카트에 저장된 내역을 로그인한 해당 사용자의 카트로 저장하고, 쿠키 카트내용은 초기화한다.
*
* @param mbInfoId
* @param request
* @return
* @throws Exception
*/
public int saveCartItemsOfNonMember(String mbInfoId, HttpServletRequest request) throws Exception;
}

View File

@ -1,16 +1,25 @@
package nlib.col.service.impl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;
import java.util.List;
import nlib.restful.DataApi;
import nlib.restful.service.DataApiReqVO;
import nlib.restful.service.DataApiResVO;
import org.apache.ibatis.annotations.Param;
@Repository("cartDAO")
public class CartDAO extends DataApi
{
private static final Logger log = LoggerFactory.getLogger(CartDAO.class);
import egovframework.rte.psl.dataaccess.mapper.Mapper;
import nlib.col.service.CollectionVO;
@Mapper("cartDAO")
public interface CartDAO {
public List<CollectionVO> 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;
}

View File

@ -1,15 +1,41 @@
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.restful.service.DataApiReqVO;
import nlib.restful.service.DataApiResVO;
import nlib.col.service.CollectionVO;
import nlib.util.StringUtil;
import nlib.col.service.CollectionService;
/**
* <pre>
* @Class Name : CartServiceImpl.java
*
* @Description : 카트관련 기능 서비스 구현 클래스
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 10. 5. KNKIM 최초 생성
*
*
* @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 10. 5.
* @version 1.0
*
*/
@Service("cartService")
public class CartServiceImpl implements CartService
{
@ -17,4 +43,222 @@ public class CartServiceImpl implements CartService
@Resource(name="cartDAO")
private CartDAO cartDAO;
@Resource(name = "collectionService")
private CollectionService collectionService;
/**
* (로그인자용) 로그인한 사용자의 카트 목록을 조회한다.
*
* @param mbInfoId
* @param cartDivCd
* @return
* @throws Exception
*/
public List<CollectionVO> listCartItems(String mbInfoId, String cartTypeCd) throws Exception {
return cartDAO.listCartItems(mbInfoId, cartTypeCd);
}
/**
* (비로그인자용) 쿠키에서 카트 목록을 조회한다.
*
* @param request
* @param cartDivCd
* @return
* @throws Exception
*/
public List<CollectionVO> 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<CollectionVO> 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<CollectionVO> targetCartItems) throws Exception {
return null;
}
/**
* 비로그인시 카트에 저장된 내역을 로그인한 해당 사용자의 카트로 저장하고, 쿠키 카트내용은 초기화한다.
*
* @param mbInfoId
* @param request
* @return
* @throws Exception
*/
public int saveCartItemsOfNonMember(String mbInfoId, HttpServletRequest request) throws Exception {
return 0;
}
}

View File

@ -1,21 +1,39 @@
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.RentService;
import nlib.col.service.CartService;
import nlib.col.service.CollectionService;
import nlib.col.service.CollectionVO;
import nlib.user.service.NlibLoginVO;
import nlib.util.StringUtil;
/**
* <pre>
* @Class Name : CartController.java
*
* @Description : 소장자료 카트 컨트롤러
* 로그인하지 않은 사용자도 카트 추가 가능하며, 추가 정보가 저장되는 영역은 다음과 같다.
* - 비회원 카트정보 쿠키 저장
* - 회원 카트정보 DB 저장
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
@ -25,11 +43,11 @@ import nlib.col.service.RentService;
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 10. 01. JSYOO 최초 생성
* @ 2021. 10. 5. KNKIM 최초 생성
*
*
* @author 이씨플라자 * DIGITALSHIP JSYOO
* @since 2021. 10. 01.
* @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 10. 5.
* @version 1.0
*
*/
@ -39,10 +57,175 @@ 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 = "cartService")
private CartService cartService;
@Resource(name = "codeService")
private CodeService codeService;
@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<CollectionVO> 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<String> 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<String, Object> retMap = new HashMap<String, Object>();
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";
}
}

View File

@ -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<String, String> 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;
}
/**

View File

@ -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);
}
//--------------------------------------------------------------

View File

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:38 KST 2016-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="nlib.col.service.impl.CartDAO">
<select id="listCartItems" parameterType="String" resultType="CollectionVO">
SELECT
A.MB_CART_ID
, A.MB_INFO_ID
, A.MASTER_ID
, A.CART_TYPE_CD
, A.REL_RSRV_ID
, A.REL_REQ_ID
, A.CART_PROC_DIV_CD
, A.DELETE_YN
, A.REG_ID
, DATE_FORMAT(A.REG_DD, '%Y-%M-%D') AS REG_DD
, A.MOD_ID
, DATE_FORMAT(A.MOD_DD, '%Y-%M-%D') AS MOD_DD
, B.MNG_ORG_CD
, B.MNG_ORG_NM
FROM MB_CART A
INNER JOIN RG_MASTER B ON A.MASTER_ID = B.MASTER_ID
WHERE A.MB_INFO_ID = #{mbInfoId}
<if test='cartTypeCd != null and !cartTypeCd.equals("") and !cartTypeCd.equals("0")'>
AND A.CART_TYPE_CD = #{cartTypeCd}
</if>
AND A.DELETE_YN = 'N'
AND IFNULL(A.CART_PROC_DIV_CD, 'N') = 'N'
ORDER BY B.MNG_ORG_CD
</select>
<select id="countCartItem" parameterType="CollectionVO" resultType="Integer">
SELECT COUNT(1)
FROM MB_CART A
WHERE MB_INFO_ID = #{mbInfoId}
AND MASTER_ID = #{masterId}
AND DELETE_YN = 'N'
</select>
<insert id="insertCartItem" parameterType="CollectionVO">
<![CDATA[
INSERT INTO MB_CART (
MB_CART_ID
, MB_INFO_ID
, MASTER_ID
, CART_TYPE_CD
, REL_RSRV_ID
, REL_REQ_ID
, CART_PROC_DIV_CD
, DELETE_YN
, REG_ID
, REG_DD
, MOD_ID
, MOD_DD
) VALUES (
NULL /* 자동생성 */
, #{mbInfoId}
, #{masterId}
, #{cartTypeCd}
, NULL
, NULL
, 'N'
, 'N'
, #{regId}
, NOW()
, NULL
, NULL
)
]]>
</insert>
<delete id="deleteCartItems" parameterType="CollectionVO">
<![CDATA[
UPDATE MB_CART SET DELETE_YN = 'Y', MOD_ID = #{modId}, MOD_DD = NOW()
WHERE MB_INFO_ID = #{mbInfoId}
AND MB_CART_ID IN (${selItems})
AND DELETE_YN = 'N'
]]>
</delete>
<update id="changeCartType" parameterType="CollectionVO">
<![CDATA[
UPDATE MB_CART SET CART_TYPE_CD = #{cartTypeCd}, MOD_ID = #{modId}, MOD_DD = NOW()
WHERE MB_INFO_ID = #{mbInfoId}
AND MB_CART_ID IN (${selItems})
AND DELETE_YN = 'N'
]]>
</update>
</mapper>

View File

@ -0,0 +1,311 @@
<%
/**
* <pre>
* @Class Name : listNotices.jsp
*
* @Description : 공지사항 목록을 조회한다.
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 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" %>
<c:set var="pageTitle">카트</c:set>
<!DOCTYPE html>
<html lang="ko">
<head>
<title>${pageTitle}</title>
<!-- GRID -->
<link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath}/js/jsgrid/nlib-jsgrid.css" />
<link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath}/js/jsgrid/nlib-jsgrid-theme.css" />
<script src="${pageContext.request.contextPath}/js/jsgrid/nlib-jsgrid.js"></script>
<script type="text/javaScript" language="javascript">
var BTN_APP_PREFIX = "대출신청/예약";
$( document ).ready(function() {
$("[id^=chk_item_]").prop("disabled", true);
$("[id^=chk_all_]").prop("disabled", true);
$("[id=selMngOrgCd]").change(function(obj) {
var checked = $(this).prop("checked");
var mngOrgCd = $(this).val();
if(checked) {
// uncheck others and disable
// enable
//$("[id^=chk_item_" + mngOrgCd + "]").prop("checked", false);
$("[id^=chk_item_" + mngOrgCd + "]").prop("disabled", false);
$("[id^=chk_all_" + mngOrgCd + "]").prop("disabled", false);
$("[id^=chk_item_]").not("[id^=chk_item_" + mngOrgCd + "]").prop("checked", false);
$("[id^=chk_item_]").not("[id^=chk_item_" + mngOrgCd + "]").prop("disabled", true);
$("[id^=chk_all_]").not("[id^=chk_all_" + mngOrgCd + "]").prop("checked", false);
$("[id^=chk_all_]").not("[id^=chk_all_" + mngOrgCd + "]").prop("disabled", true);
}
$("#mngOrgCd").val(mngOrgCd);
$("[id^=chk_item_" + mngOrgCd + "]").filter(":first").trigger("change");
});
$("[id^=chk_item_]").change(function(obj) {
var mngOrgCd = $(this).attr("id").substr(9);
var totNum = $("[id^=chk_item_" + mngOrgCd + "]").length;
var selNum = $("[id^=chk_item_" + mngOrgCd + "]:checked").length;
var checked = false;
if(totNum <= selNum) checked = true;
$("[id^=chk_all_" + mngOrgCd + "]").prop("checked", checked);
$("#btnApp").val(BTN_APP_PREFIX + " (" + selNum + ")");
});
$("[id^=selMngOrgCd]").filter(":first").prop("checked", true);
$("[id^=selMngOrgCd]").filter(":first").trigger("change",true);
}); // document ready
function fn_deleteCartItems() {
if($("[id^=chk_item_]:checked").length < 1) {
alert("삭제할 대상을 선택해 주세요.");
return;
}
if(!confirm(($("[id^=chk_item_]:checked").length) + "건을 삭제하시겠습니까?")) {
return;
}
$("#selItems").val(fn_getCheckedCartItemsValues());
$("#frm").attr("action","${pageContext.request.contextPath}/cart/deleteCartItems.do");
$("#frm").submit();
}
function fn_getCheckedCartItemsValues() {
var values = "";
$("[id^=chk_item_]:checked").each(function() {
if(values.length > 0) values += ",";
values += $(this).val();
});
return values;
}
function fn_checkMngOrgGroup() {
alert("hi");
// $("[id^=chk_" + mngOrgCd + "]").prop("checked", checked);
}
// 선택한 게시글 상세 보기로 이동
function fn_viewDetail(articleNo) {
$("#articleNo").val(articleNo);
$("#articleForm").attr("action", "${pageContext.request.contextPath}/board/selectNotice.do");
$("#articleForm").submit();
}
// 게시글 작성으로 이동
function fn_newArticle() {
$("#articleNo").val("");
$("#articleForm").attr("action", "${pageContext.request.contextPath}/board/insertNoticeForm.do");
$("#articleForm").submit();
}
// 그리드 데이터 조회 호출
function fn_searchArticle(pageSize, pageIndex) {
$("#jsGrid").jsGrid("search"
, {'pageSize' : (pageSize ? pageSize : fn_getIntValue("pageSize", ${pageSize}) ),
'pageIndex' : (pageIndex ? pageIndex : fn_getIntValue("pageIndex", 1))
}
);
}
function fn_search(cartTypeCd) {
$("#cartTypeCd").val(cartTypeCd);
$("#frm").submit();
}
function fn_selectAll(mngOrgCd) {
var allOjbName = "chk_all_" + mngOrgCd;
var checked = $("#" + allOjbName).prop("checked");
$("[id^=chk_item_" + mngOrgCd + "]").prop("checked", checked);
$("[id^=chk_item_" + mngOrgCd + "]").filter(":first").trigger("change");
}
function fn_changeCartItems(cartTypeCd, cartTypeNm) {
if($("[id^=chk_item_]:checked").length < 1) {
alert("변경할 대상을 선택해 주세요.");
return;
}
if(!confirm(($("[id^=chk_item_]:checked").length) + "건을 " + cartTypeNm + "(으)로 변경하시겠습니까?")) {
return;
}
$("#cartTypeCd").val(cartTypeCd);
$("#frm").attr("action", "${pageContext.request.contextPath}/cart/changeCartType.do");
$("#frm").submit();
}
</script>
</head>
<body>
<h1>${pageTitle }</h1>
메시지 : ${message}
&nbsp;<br/>
<form name="frm" id="frm"
action="${pageContext.request.contextPath}/cart/listCartItems.do"
method="post">
cartTypeCd = <input type="text" id="cartTypeCd" name="cartTypeCd" value="${cartTypeCd }" />
mngOrgCd = <input type="text" id="mngOrgCd" name="mngOrgCd" value="" />
selItems = <input type="text" id="selItems" name="selItems" value="" />
message = ${message }
<br>
<c:if test='${cartTypeCd == "0"}'>
<a href="javascript:void(0);" onclick="fn_search('0')"><span style="color:red">전체</span></a>
</c:if>
<c:if test='${cartTypeCd != "0"}'>
<a href="javascript:void(0);" onclick="fn_search('0')"><span style="color:blue">전체</span></a>
</c:if>
&nbsp;&nbsp;|&nbsp;&nbsp;
<c:if test='${cartTypeCd == "1"}'>
<a href="javascript:void(0);" onclick="fn_search('1')"><span style="color:red">대출</span></a>
</c:if>
<c:if test='${cartTypeCd != "1"}'>
<a href="javascript:void(0);" onclick="fn_search('1')"><span style="color:blue">대출</span></a>
</c:if>
&nbsp;&nbsp;|&nbsp;&nbsp;
<c:if test='${cartTypeCd == "2"}'>
<a href="javascript:void(0);" onclick="fn_search('2')"><span style="color:red">열람</span></a>
</c:if>
<c:if test='${cartTypeCd != "2"}'>
<a href="javascript:void(0);" onclick="fn_search('2')"><span style="color:blue">열람</span></a>
</c:if>
<br>
----------------------------------
<br>
1. 카트 > 2.신청/예약확인 > 3.신청/예약완료
<br>
----------------------------------
<br>
<c:set var="preMngOrgCd" value="" />
<c:set var="mngOrgCdCnt" value="0" />
<c:forEach var="cart" items="${list}" varStatus="status">
<c:if test="${preMngOrgCd != cart.mngOrgCd}">
<c:if test="${status.count > 1 }">
</table>
&nbsp;<br>
&nbsp;<br>
<script>
$("#_${preMngOrgCd}_cnt").text("${mngOrgCdCnt }");
</script>
</c:if>
<c:set var="mngOrgCdCnt" value="0" />
<table style="border: 1px solid black;">
<tr>
<td colspan="8">
selMngOrgCd
<input type="radio" id="selMngOrgCd" name="selMngOrgCd" value="${cart.mngOrgCd}">
${cart.mngOrgNm } (<span id="_${cart.mngOrgCd}_cnt"></span>)
</td>
</tr>
<tr>
<td>
chk_all_${cart.mngOrgCd }
<input type="checkbox" id="chk_all_${cart.mngOrgCd }" name="chk_all_${cart.mngOrgCd }" onclick="fn_selectAll('${cart.mngOrgCd}')">선택</a></td>
<td>ID</td>
<td>썸네일/관심</td>
<td>제목</td>
<td>이용상태</td>
<td>반납예정일</td>
<td>대출</td>
<td>방문열람</td>
</tr>
<c:set var="preMngOrgCd" value="${cart.mngOrgCd}" />
</c:if>
<c:set var="mngOrgCdCnt" value="${mngOrgCdCnt+1}" />
<tr>
<td>
chk_item_${cart.mngOrgCd }
<input type="checkbox" name="chk_item_${cart.mngOrgCd }" id="chk_item_${cart.mngOrgCd }" value="${cart.mbCartId }" /></td>
<td>${cart.mbCartId }</td>
<td><img src="${cart.rprsThumbUrl }" width="30" height="40"> : ${cart.interestYn }</td>
<td>${cart.title }
${cart.mngOrgCd }
</td>
<td>${cart.useStatus }<br> ${cart.useStatusNm }</td>
<td>${cart.rtnExpctDd }</td>
<td>${cart.operOutRangeCd } ${cart.operOutRangeNm }</td>
<td>${cart.operReadRangeCd } ${cart.operReadRangeNm }</td>
</tr>
</c:forEach>
<c:if test="${fn:length(list) > 0 }">
</table>
&nbsp;<br>
&nbsp;<br>
<script>
$("#_${preMngOrgCd}_cnt").text("${mngOrgCdCnt }");
</script>
</c:if>
<input type="button" name="btnDelete" id="btnDelete" value="선택삭제" onclick="fn_deleteCartItems()" />
<c:if test='${cartTypeCd == "1"}'>
<input type="button" name="btnMove" id="btnMove" value="방문열람으로이동" onclick="fn_changeCartItems('2', '방문열람')" />
<input type="button" name="btnApp" id="btnApp" value="대출신청/예약 (0)" onclick="fn_reserveCartItems()" />
<script>BTN_APP_PREFIX = "대출신청/예약"; </script>
</c:if>
<c:if test='${cartTypeCd == "2"}'>
<input type="button" name="btnMove" id="btnMove" value="대출로이동" onclick="fn_changeCartItems('1', '대출')" />
<input type="button" name="btnApp" id="btnApp" value="열람신청 (0)" onclick="fn_reserveCartItems()" />
<script>BTN_APP_PREFIX = "열람신청"; </script>
</c:if>
</form>
</body>
</html>

View File

@ -33,6 +33,9 @@ String councilNm = (String)session.getAttribute("councilCd");
<li><a href="javascript:void(0)" onclick="javascript:location.href='${pageContext.request.contextPath}/user/member/searchIdForm.do';">ID/PW찾기</a></li>
<li><a href="javascript:void(0)" onclick="javascript:location.href='${pageContext.request.contextPath}/login/loginCouncil.do?callType=member';">회원가입</a></li>
</sec:authorize>
<li><a href="javascript:void(0)" onclick="javascript:location.href='${pageContext.request.contextPath}/cart/listCartItems.do';">카트</a></li>
<li>
<sec:authorize access="isAuthenticated()">
<sec:authentication property="principal.name" var="userName" />

View File

@ -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("카트 삭제");
}