itsm_ysm/src/main/java/nlib/col/service/impl/CollectionServiceImpl.java
2021-10-25 15:10:54 +09:00

208 lines
6.8 KiB
Java

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;
/**
* <pre>
* @Class Name : CollectionServiceImpl.java
*
* @Description : 소장자료 정보를 조회하는 서비스
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 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;
@Resource(name="collectionDAO")
private CollectionDAO collectionDAO;
/**
* 자료 상세정보를 조회한다.
*
* @param searchVO
* @return
* @throws Exception
*/
public CollectionVO getItemInfo(CollectionVO searchVO) throws Exception {
String message = null;
// 입력값 확인
String masterId = searchVO.getMasterId();
String mbInfoId = searchVO.getMbInfoId();
if(StringUtil.isEmpty(masterId)) {
message = "[필수값 미입력] 자료 ID 정보가 입력되지 않았습니다.";
return new CollectionVO("E102", message);
}
// 변수 설정
DataApiReqVO reqVO = new DataApiReqVO("/uac/service/nlib/col/getItemInfo", HttpMethod.GET);
reqVO.putInfoItem("masterId", masterId);
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<CollectionVO> setDetailInfoForList(List<CollectionVO> list) throws Exception {
return setDetailInfoForList(list, null, null);
}
/**
* 목록의 자료정보에 상세정보를 조회하여 설정한 후 리턴한다.
*
* @param list
* @param mbInfoId
* @param defaultThumbnailUrl
* @return
* @throws Exception
*/
public List<CollectionVO> setDetailInfoForList(List<CollectionVO> list, String mbInfoId, String defaultThumbnailUrl) throws Exception {
if(list == null || list.size() < 1) return list;
int cnt = list.size();
HashMap<String, CollectionVO> collectionMap = new HashMap<String, CollectionVO>();
// 문화원별 API 요청 처리
String jsonMasterId = "";
for(int i=0; i<cnt; i++) {
CollectionVO vo = list.get(i);
if(StringUtil.isEmpty(vo.getMasterId())) continue;
if(mbInfoId == null) mbInfoId = vo.getMbInfoId();
// [{"masterId":"xxxx"}, {"masterId":"xxxb"},…]
if(jsonMasterId.length() > 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);
DataApiResVO resVO = dataApi.request(reqVO);
// 결과 처리
if(resVO.getResultCode().charAt(0) == 'S') {
List<HashMap<String, String>> recordList = resVO.getList("record");
if(recordList == null || recordList.size() < 1) return list;
for(HashMap<String, String> 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<cnt; i++) {
CollectionVO vo = list.get(i);
String masterId = vo.getMasterId();
CollectionVO cVO = collectionMap.get(masterId);
if(cVO == null) continue;
vo.setTitle (cVO.getTitle());
vo.setTypeDivCd (cVO.getTypeDivCd());
vo.setTypeCodeNm (cVO.getTypeCodeNm());
vo.setSubjectNm (cVO.getSubjectNm());
vo.setOrgNm (cVO.getOrgNm());
vo.setCreatYyyy (cVO.getCreatYyyy());
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 (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 조회
if(StringUtil.isEmpty(cVO.getMngOrgCd()) || StringUtil.isEmpty(cVO.getMngOrgNm())) {
CollectionVO dbVO = collectionDAO.selectMngOrgInfo(vo.getMasterId());
if(dbVO != null) {
vo.setMngOrgCd(dbVO.getMngOrgCd());
vo.setMngOrgNm(dbVO.getMngOrgNm());
}
}
}
//
// // DDDDDDDDDDDDDDDDDd 문화원 멀티 처리를 위해 테스트용으로 데이터 변경
// CollectionVO vo = list.get(cnt-2);
// vo.setMngOrgCd("SU01");
// vo.setMngOrgNm("마포문화원");
// CollectionVO vo2 = list.get(cnt-1);
// vo2.setMngOrgCd("SU01");
// vo2.setMngOrgNm("마포문화원");
return list;
}
}