Merge remote-tracking branch 'origin/master'

This commit is contained in:
JSYOO 2021-10-13 14:07:13 +09:00
commit 2f0e3170f8
13 changed files with 174 additions and 45 deletions

View File

@ -121,7 +121,7 @@ public class QRCodeUtil {
* @return * @return
* @throws Exception * @throws Exception
*/ */
public static BufferedImage generateMemberQRCodeImage(NlibLoginVO loginVO) throws Exception { public static BufferedImage generateMemberQrcodeImage(NlibLoginVO loginVO) throws Exception {
if(loginVO == null) { if(loginVO == null) {
throw new Exception("QR 2D바코드로 생성할 사용자 정보가 없습니다."); throw new Exception("QR 2D바코드로 생성할 사용자 정보가 없습니다.");

View File

@ -61,31 +61,17 @@ public class CollectionServiceImpl implements CollectionService {
String message = null; String message = null;
// 입력값 확인 // 입력값 확인
String mngOrgCd = searchVO.getMngOrgCd();
String masterId = searchVO.getMasterId(); String masterId = searchVO.getMasterId();
String typeDivCd = searchVO.getTypeDivCd();
String mbInfoId = searchVO.getMbInfoId(); String mbInfoId = searchVO.getMbInfoId();
if(StringUtil.isEmpty(mngOrgCd)) {
message = "[필수값 미입력] 지방문화원정보가 입력되지 않았습니다.";
return new CollectionVO("E101", message);
}
if(StringUtil.isEmpty(masterId)) { if(StringUtil.isEmpty(masterId)) {
message = "[필수값 미입력] 자료 ID 정보가 입력되지 않았습니다."; message = "[필수값 미입력] 자료 ID 정보가 입력되지 않았습니다.";
return new CollectionVO("E102", message); return new CollectionVO("E102", message);
} }
if(StringUtil.isEmpty(typeDivCd)) {
message = "[필수값 미입력] 자료유형코드가 입력되지 않았습니다.";
return new CollectionVO("E103", message);
}
// 변수 설정 // 변수 설정
DataApiReqVO reqVO = new DataApiReqVO("/uac/service/nlib/col/getItemInfo", HttpMethod.GET); DataApiReqVO reqVO = new DataApiReqVO("/uac/service/nlib/col/getItemInfo", HttpMethod.GET);
reqVO.putInfoItem("mngOrgCd", mngOrgCd);
reqVO.putInfoItem("masterId", masterId); reqVO.putInfoItem("masterId", masterId);
reqVO.putInfoItem("typeDivCd", typeDivCd);
reqVO.setMbInfoId(mbInfoId); // 통신 , 암호화되어 송수신됨 reqVO.setMbInfoId(mbInfoId); // 통신 , 암호화되어 송수신됨
// API 호출 // API 호출
@ -231,7 +217,6 @@ public class CollectionServiceImpl implements CollectionService {
DataApiReqVO reqVO = new DataApiReqVO("/uac/service/nlib/col/listItemInfo", HttpMethod.GET); DataApiReqVO reqVO = new DataApiReqVO("/uac/service/nlib/col/listItemInfo", HttpMethod.GET);
reqVO.setMbInfoId(mbInfoId); // 통신 , 암호화되어 송수신됨 reqVO.setMbInfoId(mbInfoId); // 통신 , 암호화되어 송수신됨
reqVO.putInfoItem("jsonMasterId", jsonMasterId); reqVO.putInfoItem("jsonMasterId", jsonMasterId);
reqVO.putInfoItem("mngOrgCd", "KCCF"); // DDDDDDDDDDDDDDDDDd API 개발서버 반영전까지 임시 처리
DataApiResVO resVO = dataApi.request(reqVO); DataApiResVO resVO = dataApi.request(reqVO);
@ -279,14 +264,14 @@ public class CollectionServiceImpl implements CollectionService {
vo.setInterestYn (cVO.getInterestYn()); vo.setInterestYn (cVO.getInterestYn());
} }
//
// DDDDDDDDDDDDDDDDDd 문화원 멀티 처리를 위해 테스트용으로 데이터 변경 // // DDDDDDDDDDDDDDDDDd 문화원 멀티 처리를 위해 테스트용으로 데이터 변경
CollectionVO vo = list.get(cnt-2); // CollectionVO vo = list.get(cnt-2);
vo.setMngOrgCd("SU01"); // vo.setMngOrgCd("SU01");
vo.setMngOrgNm("마포문화원"); // vo.setMngOrgNm("마포문화원");
CollectionVO vo2 = list.get(cnt-1); // CollectionVO vo2 = list.get(cnt-1);
vo2.setMngOrgCd("SU01"); // vo2.setMngOrgCd("SU01");
vo2.setMngOrgNm("마포문화원"); // vo2.setMngOrgNm("마포문화원");
return list; return list;
} }

View File

@ -70,7 +70,7 @@ public class BarcodeController {
log.debug("getMemberQRCode : loginVO=" + loginVO.toString()); log.debug("getMemberQRCode : loginVO=" + loginVO.toString());
BufferedImage bufferedImage = qrCodeService.generateMemberQRCodeImage(loginVO); BufferedImage bufferedImage = qrCodeService.generateMemberQrcodeImage(loginVO);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ImageIO.write( bufferedImage , "jpg", byteArrayOutputStream); ImageIO.write( bufferedImage , "jpg", byteArrayOutputStream);

View File

@ -141,7 +141,7 @@ public class SampleDataApiController extends NlibCommonController {
reqVO.putInfoItem("rows", getParamStr(commandMap, "rows", "10")); reqVO.putInfoItem("rows", getParamStr(commandMap, "rows", "10"));
reqVO.putInfoItem("page", getParamStr(commandMap, "rows", "1")); reqVO.putInfoItem("page", getParamStr(commandMap, "rows", "1"));
reqVO.putInfoItem("mngOrgCd", getParamStr(commandMap, "mngOrgCd", "KCCF")); reqVO.putInfoItem("mngOrgCd", getParamStr(commandMap, "mngOrgCd", "KCCF"));
reqVO.putInfoItem("mbInfoId", getParamStr(commandMap, "mbInfoId", "BDCCAF34CF8AA365C660ADB121CE6741")); reqVO.setMbInfoId("M1000000001"); //putInfoItem("mbInfoId", getParamStr(commandMap, "mbInfoId", "BDCCAF34CF8AA365C660ADB121CE6741"));
// 사용자ID 설정 // 사용자ID 설정
// NlibLoginVO nlibLoginVO = getNlibLoginVO(request); // NlibLoginVO nlibLoginVO = getNlibLoginVO(request);

View File

@ -1,18 +1,23 @@
package nlib.user.web; package nlib.user.web;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.Authentication; import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@ -21,15 +26,13 @@ import org.springframework.web.bind.annotation.ResponseBody;
import egovframework.com.ext.oauth.service.OAuthUniversalUser; import egovframework.com.ext.oauth.service.OAuthUniversalUser;
import egovframework.rte.fdl.cryptography.EgovPasswordEncoder; import egovframework.rte.fdl.cryptography.EgovPasswordEncoder;
import nlib.restful.service.DataApiReqVO; import nlib.cmm.NlibCommonController;
import nlib.cmm.qrcode.QRCodeUtil;
import nlib.security.SecUserDetailsService; import nlib.security.SecUserDetailsService;
import nlib.security.SecUserVO;
import nlib.user.service.LoginService; import nlib.user.service.LoginService;
import nlib.user.service.MemberService;
import nlib.user.service.NlibLoginVO; import nlib.user.service.NlibLoginVO;
import nlib.user.service.UserInfoService; import nlib.user.service.UserInfoService;
import nlib.cmm.NlibCommonController; import nlib.util.StringUtil;
import nlib.cmm.service.NlibProperty;
/** /**
@ -47,6 +50,7 @@ import nlib.cmm.service.NlibProperty;
* @ 수정일 수정자 수정내용 * @ 수정일 수정자 수정내용
* @ ------------ -------- --------------------------- * @ ------------ -------- ---------------------------
* @ 2021. 7. 14. JSYOO 최초 생성 * @ 2021. 7. 14. JSYOO 최초 생성
* @ 2021.10. 7. KKN 회원증 조회 기능 추가
* *
* *
* @author 이씨플라자 * DIGITALSHIP JSYOO * @author 이씨플라자 * DIGITALSHIP JSYOO
@ -57,6 +61,8 @@ import nlib.cmm.service.NlibProperty;
@Controller @Controller
public class UserInfoController extends NlibCommonController { public class UserInfoController extends NlibCommonController {
private static final Logger log = LoggerFactory.getLogger(UserInfoController.class);
@Resource(name="userInfoService") @Resource(name="userInfoService")
private UserInfoService userInfoService; private UserInfoService userInfoService;
@ -70,6 +76,11 @@ public class UserInfoController extends NlibCommonController {
private SecUserDetailsService SecUserDetailsService; private SecUserDetailsService SecUserDetailsService;
/** QRCodeService (2021.10.07) */
@Resource(name = "qrCodeService")
private QRCodeUtil qrCodeService;
/** /**
* 정보 조회 * 정보 조회
* @exception Exception * @exception Exception
@ -188,4 +199,57 @@ public class UserInfoController extends NlibCommonController {
userInfoService.deleteSnsLink(oAuthVO); userInfoService.deleteSnsLink(oAuthVO);
} }
/**
* 회원증 QR코드를 조회한다.
*
* (2021.10.07 KKN 추가)
*
* @param request
* @param model
* @return
*/
@RequestMapping(value="/userInfo/getMemberQrcodeFormPopup.do")
public String getMemberQrcodeFormPopup(HttpServletRequest request, ModelMap model) {
NlibLoginVO loginVO = getNlibLoginVO(request);
log.debug("getMemberQrcode : loginVO=" + loginVO.toString());
model.addAttribute("loginVO", loginVO);
return "nlib/userInfo/getMemberQrcodeFormPopup";
}
/**
* 회원정보를 가지고 QR 2D 바코드를 생성하여 이미지(JPG) 출력한다.
* (Zxing Lib 사용)
*
* (2021.10.07 KKN 추가)
*
* @param request
* @param response
* @return
* @throws Exception
*/
@RequestMapping(value="/userInfo/getMemberQrcode.do", produces=MediaType.IMAGE_JPEG_VALUE)
public ResponseEntity<byte[]> getMemberQrcode(HttpServletRequest request, HttpServletResponse response) throws Exception {
NlibLoginVO loginVO = getNlibLoginVO(request);
if(loginVO == null || StringUtil.isEmpty(loginVO.getMbInfoId())) {
throw new Exception("잘못된 접근입니다.");
}
BufferedImage bufferedImage = qrCodeService.generateMemberQrcodeImage(loginVO);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ImageIO.write( bufferedImage , "jpg", byteArrayOutputStream);
byte[] bs = byteArrayOutputStream.toByteArray();
response.setContentLength(bs.length);
final HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.IMAGE_JPEG);
return new ResponseEntity<byte[]>(bs , headers, HttpStatus.OK);
}
} }

View File

@ -50,15 +50,15 @@ nlib.council.dns.host = nlib
# DataAPI \uc811\uc18d\uc815\ubcf4 # DataAPI \uc811\uc18d\uc815\ubcf4
#---------------------------------------- #----------------------------------------
# \uac1c\ubc1c \uc11c\ubc84 # \uac1c\ubc1c \uc11c\ubc84
#dataapi.server.ip = 210.181.197.70 dataapi.server.ip = 210.181.197.70
#dataapi.server.port = 80
#dataapi.server.protocol = http
# \uc784\uc2dc PC \uac1c\ubc1c \uc11c\ubc84
dataapi.server.ip = 192.168.25.87
dataapi.server.port = 8080 dataapi.server.port = 8080
dataapi.server.protocol = http dataapi.server.protocol = http
# \uc784\uc2dc PC \uac1c\ubc1c \uc11c\ubc84
#dataapi.server.ip = 192.168.25.87
#dataapi.server.port = 8080
#dataapi.server.protocol = http
# \ub85c\uceec \uc11c\ubc84 # \ub85c\uceec \uc11c\ubc84
#dataapi.server.ip = localhost #dataapi.server.ip = localhost
#dataapi.server.port = 8088 #dataapi.server.port = 8088

View File

@ -17,10 +17,12 @@
<property name="webBindingInitializer"> <property name="webBindingInitializer">
<bean class="egovframework.com.cmm.web.EgovBindingInitializer"/> <bean class="egovframework.com.cmm.web.EgovBindingInitializer"/>
</property> </property>
<!-- @ResponseBody : application/json 변경 (2021.7.20 KKN) -->
<property name="messageConverters"> <property name="messageConverters">
<list> <list>
<!-- @ResponseBody : application/json 변경 (2021.7.20 KKN) -->
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
</list> </list>
</property> </property>
</bean> </bean>

View File

@ -167,6 +167,8 @@ function fn_changeCartItems(cartTypeCd, cartTypeNm) {
return; return;
} }
$("#cartTypeCd").val(cartTypeCd); $("#cartTypeCd").val(cartTypeCd);
$("#selItems").val(fn_getCheckedCartItemsValues());
$("#frm").attr("action", "${pageContext.request.contextPath}/cart/changeCartType.do"); $("#frm").attr("action", "${pageContext.request.contextPath}/cart/changeCartType.do");
$("#frm").submit(); $("#frm").submit();
} }

View File

@ -1,7 +1,7 @@
<% <%
/** /**
* <pre> * <pre>
* @Class Name : getSampleInfo.jsp * @Class Name : listRentItem.jsp (샘플)
* *
* @Description : RESTful API 호출 샘플 * @Description : RESTful API 호출 샘플
* *
@ -59,6 +59,7 @@
<div style="clear:both;">Server PORT : ${serverPort}</div> <div style="clear:both;">Server PORT : ${serverPort}</div>
<br />&nbsp; <br />&nbsp;
<a href="/cart/listCartItems.do">카트</a><br />
<br />&nbsp; <br />&nbsp;
<br /> <br />
@ -82,6 +83,10 @@
&nbsp;&nbsp;&nbsp;&nbsp; > typeCodeNm = ${record.typeCodeNm} <br /> &nbsp;&nbsp;&nbsp;&nbsp; > typeCodeNm = ${record.typeCodeNm} <br />
&nbsp;&nbsp;&nbsp;&nbsp; > awaiterCnt = ${record.awaiterCnt} <br /> &nbsp;&nbsp;&nbsp;&nbsp; > awaiterCnt = ${record.awaiterCnt} <br />
&nbsp;&nbsp;&nbsp;&nbsp; > useStatus = ${record.useStatus} <br /> &nbsp;&nbsp;&nbsp;&nbsp; > useStatus = ${record.useStatus} <br />
&nbsp;&nbsp;&nbsp;&nbsp; > masterId = ${record.masterId} <br />
<input type="button" name="addCartBtn" id="addCartBtn" onclick="fn_addRentCart('${record.masterId}', '${record.mngOrgCd}', '${record.typeDivCd}', '${record.useStatus}')" value="관심자료 추가" />
<br />
</c:forEach> </c:forEach>
<br /> <br />

View File

@ -0,0 +1,69 @@
<%
/**
* <pre>
* @Class Name : getMemberQrcodeForm.jsp
*
* @Description : 회원증
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 10. 7. KNKIM 최초 생성
*
*
* @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 10. 7.
* @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>
<head>
<title>${pageTitle}</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javaScript" language="javascript">
</script>
</head>
<body>
<div class="wTableFrm" style="text-align:center;">
<!-- 타이틀 -->
<h2>${pageTitle}</h2>
<span name="userName" id="userName" title="이름"> ${loginVO.name} |
<span name="userBirthday" id="userBirthday" title="생년월일">
<fmt:parseDate value="${loginVO.birthday}" var="dateFmt" pattern="yyyyMMdd"/>
<fmt:formatDate value="${dateFmt}" var="dateStr" pattern="yyyy-MM-dd"/> ${dateStr}</span>
<br />
<img src="${pageContext.request.contextPath}/userInfo/getMemberQrcode.do" />
<br />
&nbsp;<br />
<span name="userNumber" id="userNumber" title="회원코드">회원코드 : ${loginVO.mbInfoId}</span>
<br />
&nbsp;<br />
※ 캡쳐한 회원증을 통한 자료대출 및 열람을 불허합니다.
</div>
</body>
</html>

View File

@ -1,4 +1,4 @@
<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<a href="javascript:void(0);" onclick="$('#myPop').html('');$('#myPop').hide();" class="floatRight">닫기</a> <a href="javascript:void(0);" onclick="fn_closeLayerPopup()" class="floatRight">닫기</a>

View File

@ -27,6 +27,7 @@ String councilNm = (String)session.getAttribute("councilCd");
<sec:authorize access="isAuthenticated()"> <sec:authorize access="isAuthenticated()">
<li><a href="javascript:void(0)" onclick="javascript:location.href='${pageContext.request.contextPath}/userInfo/getMyInfo.do';">내 정보</a></li> <li><a href="javascript:void(0)" onclick="javascript:location.href='${pageContext.request.contextPath}/userInfo/getMyInfo.do';">내 정보</a></li>
<li><a href="javascript:void(0)" onclick="javascript:fn_layerPop('${pageContext.request.contextPath}/userInfo/getMemberQrcodeFormPopup.do');">회원증</a></li>
<li><a href="javascript:void(0)" onclick="javascript:location.href='${pageContext.request.contextPath}/logout';">로그아웃</a></li> <li><a href="javascript:void(0)" onclick="javascript:location.href='${pageContext.request.contextPath}/logout';">로그아웃</a></li>
</sec:authorize> </sec:authorize>
<sec:authorize access="not isAuthenticated()"> <sec:authorize access="not isAuthenticated()">

View File

@ -19,6 +19,7 @@
<link href="${pageContext.request.contextPath}/css/nlib.css" rel="stylesheet" type="text/css" /> <link href="${pageContext.request.contextPath}/css/nlib.css" rel="stylesheet" type="text/css" />
<script src="${pageContext.request.contextPath}/js/jquery/jquery.min.js"></script> <script src="${pageContext.request.contextPath}/js/jquery/jquery.min.js"></script>
<script src="${pageContext.request.contextPath}/js/nlib.js"></script> <script src="${pageContext.request.contextPath}/js/nlib.js"></script>
<script src="${pageContext.request.contextPath}/js/cart.js"></script>
<title>온라인 자료대출관리 (N-LIB)</title> <title>온라인 자료대출관리 (N-LIB)</title>