diff --git a/src/main/java/nlib/col/service/CollectionService.java b/src/main/java/nlib/col/service/CollectionService.java new file mode 100644 index 00000000..e4b5f3f0 --- /dev/null +++ b/src/main/java/nlib/col/service/CollectionService.java @@ -0,0 +1,47 @@ +package nlib.col.service; + +import java.util.List; + +/** + *
+ * @Class Name : CollectionService.java + * + * @Description : 소장자료 정보를 조회하는 서비스 인터페이스 + * + * + * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021) + * + *+ * + * @ ------------ -------- --------------------------- + * @ 수정일 수정자 수정내용 + * @ ------------ -------- --------------------------- + * @ 2021. 10. 6. KNKIM 최초 생성 + * + * + * @author 이씨플라자 * DIGITALSHIP KNKIM + * @since 2021. 10. 6. + * @version 1.0 + * + */ +public interface CollectionService { + + /** + * 자료 상세정보를 조회한다. + * + * @param searchVO + * @return + * @throws Exception + */ + public CollectionVO getItemInfo(CollectionVO searchVO) throws Exception; + + + /** + * 목록의 자료정보에 상세정보를 조회하여 설정한 후 리턴한다. + * + * @param list + * @return + * @throws Exception + */ + public List
@@ -19,8 +21,7 @@ import java.io.Serializable;
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 9. 23. JSYOO 최초 생성
- * @ 2021.10. 06. KKN 자료에 대한 세부 항목 추가
-
+ * @ 2021.10. 06. KKN 자료에 대한 세부 항목, 생성자 함수 추가
*
*
* @author 이씨플라자 * DIGITALSHIP JSYOO
@@ -28,19 +29,22 @@ import java.io.Serializable;
* @version 1.0
*
*/
+@JsonIgnoreProperties(ignoreUnknown = true)
public class CollectionVO extends PagingVO {
- private String masterId; /* 마스터id */
- private int mbInterestId; /* 관심 id */
- private String mbInfoId; /* 회원 id */
- private String title; /* 제목 */
- private String rprsThumbUrl; /* 대표썸네일URL */
- private String useYn; /* 사용여부 */
- private String regDd; /* 등록일자 */
- private String mngOrgNm; /* 관리처리과명 */
- private String mngOrgCd; /* 관리처리과코드 */
+ // 기본 썸네일 (썸네일 존재하지 않는 경우, default url)
+ public final String THUMBNAIL_IMG_URL = NlibProperty.getString("item.thumbnail.image.url");
- // 상세항목 추가 (2021.10. 06.)
+ //--------------------------------------------
+ // 자료항목
+ //--------------------------------------------
+ private String masterId; /* 마스터id */
+ private String title; /* 제목 */
+ private String rprsThumbUrl; /* 대표썸네일URL */
+ private String useYn; /* 사용여부 */
+ private String regDd; /* 등록일자 */
+ private String mngOrgNm; /* 관리처리과명 */
+ private String mngOrgCd; /* 관리처리과코드 */
private String typeDivCd; /* 자료유형코드 */
private String typeCodeNm; /* 자료유형명 (도서간행물/문서/도면 등) */
private String subjectNm; /* 주제분야명 */
@@ -84,11 +88,11 @@ public class CollectionVO extends PagingVO {
private String photoSizeNm; /* 사진필름미디어규격 */
private String photoDescription; /* 사진필름미디어설명 */
private String photoAdditionalDescription; /* 사진필름미디어부가설명 */
- private String videoMediaCd; /* 녹음동영상미디어유형구분코드 */
- private String videoMediaNm; /* 녹음동영상미디어유형구분코드명 */
- private String videoTime; /* 녹음동영상미디어재생시간 */
- private String videoStat; /* 녹음동영상미디어재생화질상태 */
- private String videoDescription; /* 녹음동영상미디어설명 */
+ private String videoMediaCd; /* 녹음동영상미디어유형구분코드 */
+ private String videoMediaNm; /* 녹음동영상미디어유형구분코드명 */
+ private String videoTime; /* 녹음동영상미디어재생시간 */
+ private String videoStat; /* 녹음동영상미디어재생화질상태 */
+ private String videoDescription; /* 녹음동영상미디어설명 */
private String videoAdditionalDescription; /* 녹음동영상미디어부가설명 */
private String museTypeCd; /* 박물유형구분코드 */
private String museTypeNm; /* 박물유형구분코드명 */
@@ -97,7 +101,43 @@ public class CollectionVO extends PagingVO {
private String museMeterialCd; /* 박물재질 */
private String museMeterialNm; /* 박물재질명 */
private String assetLink; /* 자산링크 */
+ private String regId; /* 등록자ID */
+ private String modId; /* 변경자ID */
+
+ //--------------------------------------------
+ // 기타 연관기능 항목
+ //--------------------------------------------
+ private int mbInterestId; /* 관심 id */
+ private String mbInfoId; /* 회원 id */
+ private String mbCartId; /* 카트ID */
+ private String cartTypeCd; /* 카트유형코드 */
+ private String rsrvId; /* 카트관련대출예약ID */
+ private String reqId; /* 카트관련열람예약ID */
+ private String cartProcDivCd; /* 카트처리구분코드 */
+
+ //--------------------------------------------
+ // 기타 및 처리결과 항목
+ //--------------------------------------------
+ private String selItems; /* 다건선택된 카트ID 목록 ","로 구분 */
+ private String resultCode; /* 결과코드 */
+ private String resultMessage; /* 결과메시지 */
+ // 생성자
+ public CollectionVO() {
+ super();
+ }
+
+ public CollectionVO(String resultCode, String resultMessage) {
+ super();
+ setResult(resultCode, resultMessage);
+ }
+
+ public void setResult(String resultCode, String resultMessage) {
+ this.resultCode = resultCode;
+ this.resultMessage = resultMessage;
+ }
+
+ // GET & SET
public String getMasterId() {
return masterId;
@@ -127,7 +167,7 @@ public class CollectionVO extends PagingVO {
this.title = title;
}
public String getRprsThumbUrl() {
- return rprsThumbUrl;
+ return rprsThumbUrl == null ? THUMBNAIL_IMG_URL : rprsThumbUrl;
}
public void setRprsThumbUrl(String rprsThumbUrl) {
this.rprsThumbUrl = rprsThumbUrl;
@@ -211,6 +251,11 @@ public class CollectionVO extends PagingVO {
this.operReadRangeCd = operReadRangeCd;
}
public String getOperReadRangeNm() {
+ /* 01:전체열람 02: 목록열람 03:열람불가 */
+ if("01".equals(operReadRangeCd)) return "전체열람";
+ else if("02".equals(operReadRangeCd)) return "목록열람";
+ else if("03".equals(operReadRangeCd)) return "열람불가";
+
return operReadRangeNm;
}
public void setOperReadRangeNm(String operReadRangeNm) {
@@ -223,6 +268,10 @@ public class CollectionVO extends PagingVO {
this.operOutRangeCd = operOutRangeCd;
}
public String getOperOutRangeNm() {
+ /* 01:대출가능 02: 대출불가 */
+ if("01".equals(operOutRangeCd)) return "대출가능";
+ else if("02".equals(operOutRangeCd)) return "대출불가";
+
return operOutRangeNm;
}
public void setOperOutRangeNm(String operOutRangeNm) {
@@ -235,6 +284,23 @@ public class CollectionVO extends PagingVO {
this.useStatus = useStatus;
}
public String getUseStatusNm() {
+
+ /* 01 : 이용가능
+ 02 : 대출중 (대기자 0명)
+ 03 : 대출중 (대기자 1명)
+ 04 : 열람대기(대출가능)
+ 05 : 이용가능
+ 06 : 열람대기(대출불가능)
+ 07 : 온라인열람만"
+ */
+ if("01".equals(useStatus)) return "이용가능";
+ else if("02".equals(useStatus)) return String.format("대출중 (대기자 %s명)", awaiterCnt);
+ else if("03".equals(useStatus)) return String.format("대출중 (대기자 %s명)", awaiterCnt);
+ else if("04".equals(useStatus)) return "열람대기(대출가능)";
+ else if("05".equals(useStatus)) return "이용가능";
+ else if("06".equals(useStatus)) return "열람대기(대출불가능)";
+ else if("07".equals(useStatus)) return "온라인열람만";
+
return useStatusNm;
}
public void setUseStatusNm(String useStatusNm) {
@@ -492,6 +558,82 @@ public class CollectionVO extends PagingVO {
public void setAssetLink(String assetLink) {
this.assetLink = assetLink;
}
+ public String getResultCode() {
+ return resultCode;
+ }
+ public void setResultCode(String resultCode) {
+ this.resultCode = resultCode;
+ }
+ public String getResultMessage() {
+ return resultMessage;
+ }
+ public void setResultMessage(String resultMessage) {
+ this.resultMessage = resultMessage;
+ }
+
+ public String getMbCartId() {
+ return mbCartId;
+ }
+
+ public void setMbCartId(String mbCartId) {
+ this.mbCartId = mbCartId;
+ }
+
+ public String getCartTypeCd() {
+ return cartTypeCd;
+ }
+
+ public void setCartTypeCd(String cartTypeCd) {
+ this.cartTypeCd = cartTypeCd;
+ }
+
+ public String getRsrvId() {
+ return rsrvId;
+ }
+
+ public void setRsrvId(String rsrvId) {
+ this.rsrvId = rsrvId;
+ }
+
+ public String getReqId() {
+ return reqId;
+ }
+
+ public void setReqId(String reqId) {
+ this.reqId = reqId;
+ }
+
+ public String getCartProcDivCd() {
+ return cartProcDivCd;
+ }
+
+ public void setCartProcDivCd(String cartProcDivCd) {
+ this.cartProcDivCd = cartProcDivCd;
+ }
+
+ public String getRegId() {
+ return regId;
+ }
+
+ public void setRegId(String regId) {
+ this.regId = regId;
+ }
+
+ public String getModId() {
+ return modId;
+ }
+
+ public void setModId(String modId) {
+ this.modId = modId;
+ }
+
+ public String getSelItems() {
+ return selItems;
+ }
+
+ public void setSelItems(String selItems) {
+ this.selItems = selItems;
+ }
}
diff --git a/src/main/java/nlib/col/service/impl/CartServiceImpl.java b/src/main/java/nlib/col/service/impl/CartServiceImpl.java
index 59376eba..da77606a 100644
--- a/src/main/java/nlib/col/service/impl/CartServiceImpl.java
+++ b/src/main/java/nlib/col/service/impl/CartServiceImpl.java
@@ -10,9 +10,9 @@ import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import nlib.col.service.CartService;
+import nlib.col.service.CollectionService;
import nlib.col.service.CollectionVO;
import nlib.util.StringUtil;
-import nlib.col.service.CollectionService;
/**
*
diff --git a/src/main/java/nlib/col/service/impl/CollectionServiceImpl.java b/src/main/java/nlib/col/service/impl/CollectionServiceImpl.java
new file mode 100644
index 00000000..e59153ec
--- /dev/null
+++ b/src/main/java/nlib/col/service/impl/CollectionServiceImpl.java
@@ -0,0 +1,293 @@
+package nlib.col.service.impl;
+
+import java.util.HashMap;
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpMethod;
+import org.springframework.stereotype.Service;
+
+import nlib.col.service.CollectionService;
+import nlib.col.service.CollectionVO;
+import nlib.restful.DataApi;
+import nlib.restful.service.DataApiReqVO;
+import nlib.restful.service.DataApiResVO;
+import nlib.restful.service.XmlConverter;
+import nlib.util.StringUtil;
+
+/**
+ *
+ * @Class Name : CollectionServiceImpl.java
+ *
+ * @Description : 소장자료 정보를 조회하는 서비스
+ *
+ *
+ * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
+ *
+ *
+ *
+ * @ ------------ -------- ---------------------------
+ * @ 수정일 수정자 수정내용
+ * @ ------------ -------- ---------------------------
+ * @ 2021. 10. 6. KNKIM 최초 생성
+ *
+ *
+ * @author 이씨플라자 * DIGITALSHIP KNKIM
+ * @since 2021. 10. 6.
+ * @version 1.0
+ *
+ */
+@Service("collectionService")
+public class CollectionServiceImpl implements CollectionService {
+
+ private static final Logger log = LoggerFactory.getLogger(CollectionServiceImpl.class);
+
+ /** RESTFul API 송수신 모듈 */
+ @Resource(name = "dataApi")
+ private DataApi dataApi;
+
+ /**
+ * 자료 상세정보를 조회한다.
+ *
+ * @param searchVO
+ * @return
+ * @throws Exception
+ */
+ public CollectionVO getItemInfo(CollectionVO searchVO) throws Exception {
+
+ String message = null;
+
+ // 입력값 확인
+ String mngOrgCd = searchVO.getMngOrgCd();
+ String masterId = searchVO.getMasterId();
+ String typeDivCd = searchVO.getTypeDivCd();
+ String mbInfoId = searchVO.getMbInfoId();
+
+ if(StringUtil.isEmpty(mngOrgCd)) {
+ message = "[필수값 미입력] 지방문화원정보가 입력되지 않았습니다.";
+ return new CollectionVO("E101", message);
+ }
+
+ if(StringUtil.isEmpty(masterId)) {
+ message = "[필수값 미입력] 자료 ID 정보가 입력되지 않았습니다.";
+ 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);
+ reqVO.putInfoItem("mngOrgCd", mngOrgCd);
+ reqVO.putInfoItem("masterId", masterId);
+ reqVO.putInfoItem("typeDivCd", typeDivCd);
+ reqVO.setMbInfoId(mbInfoId); // 통신 시, 암호화되어 송수신됨
+
+ // API 호출
+ DataApiResVO resVO = dataApi.request(reqVO);
+
+ // 결과값 전달
+ CollectionVO retVO = (CollectionVO)XmlConverter.convertMapToObject(resVO.getInfo(), CollectionVO.class);
+ retVO.setResultCode(resVO.getResultCode());
+ retVO.setResultMessage(resVO.getResultMessage());
+
+ return retVO;
+ }
+
+ /**
+ * 목록의 자료정보에 상세정보를 조회하여 설정한 후 리턴한다.
+ *
+ * @param list
+ * @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 {
+
+ if(list == null || list.size() < 1) return list;
+
+ int cnt = list.size();
+ HashMap collectionMap = new HashMap();
+ String mbInfoId = null;
+
+ // 문화원별 API 요청 처리
+ String jsonMasterId = "";
+ for(int i=0; i 0) jsonMasterId += ",";
+ jsonMasterId += "{\"masterId\":\"" + vo.getMasterId() + "\"}";
+ }
+ if(StringUtil.isEmpty(jsonMasterId)) return list;
+ jsonMasterId = "[" + jsonMasterId + "]";
+
+ // API 호출
+ DataApiReqVO reqVO = new DataApiReqVO("/uac/service/nlib/col/listItemInfo", HttpMethod.GET);
+ reqVO.setMbInfoId(mbInfoId); // 통신 시, 암호화되어 송수신됨
+ reqVO.putInfoItem("jsonMasterId", jsonMasterId);
+ reqVO.putInfoItem("mngOrgCd", "KCCF"); // DDDDDDDDDDDDDDDDDd API 개발서버 반영전까지 임시 처리
+
+ DataApiResVO resVO = dataApi.request(reqVO);
+
+ // 결과 처리
+ if(resVO.getResultCode().charAt(0) == 'S') {
+ List> recordList = resVO.getList("record");
+ if(recordList == null || recordList.size() < 1) return list;
+
+ 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 map, Class voClass) {
+ final ObjectMapper mapper = new ObjectMapper(); // jackson's objectmapper
+ mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
+ final Object voObj = mapper.convertValue(map, voClass);
+ return voObj;
+ }
+
/*
public static void main(String argv[]) throws Exception {
diff --git a/src/main/java/nlib/util/StringUtil.java b/src/main/java/nlib/util/StringUtil.java
index 3a166c9c..19b22b38 100644
--- a/src/main/java/nlib/util/StringUtil.java
+++ b/src/main/java/nlib/util/StringUtil.java
@@ -1,6 +1,7 @@
package nlib.util;
import java.net.URL;
+import java.net.URLEncoder;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Base64;
@@ -120,6 +121,26 @@ public class StringUtil extends StringUtils {
return rtnStr;
}
+
+ /**
+ * Base64로 인코딩한다.
+ *
+ * @return
+ */
+ public static String encodeUrl(String str) {
+
+ if(isEmpty(str)) return "";
+
+ String encodedStr = null;
+
+ try {
+ encodedStr = URLEncoder.encode(str, "UTF-8");
+ } catch(Exception e) {
+ log.error("encodeUrl > Error while encoding for [" + str + "] " + e.toString());
+ encodedStr = str;
+ }
+ return encodedStr;
+ }
/**
* Base64로 인코딩한다.