package com.interplug.qcast.biz.displayItem; import com.interplug.qcast.biz.displayItem.dto.*; import com.interplug.qcast.biz.estimate.EstimateMapper; import com.interplug.qcast.biz.estimate.dto.NoteRequest; import com.interplug.qcast.biz.estimate.dto.NoteResponse; import com.interplug.qcast.config.Exception.ErrorCode; import com.interplug.qcast.config.Exception.QcastException; import io.micrometer.common.util.StringUtils; import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Slf4j @Service @RequiredArgsConstructor @Transactional(readOnly = true) public class DisplayItemService { private final EstimateMapper estimateMapper; private final DisplayItemMapper displayItemMapper; /** * 판매점 노출 아이템 정보 저장 * * @param displayItemRequest * @throws QcastException */ @Transactional public void setStoreDisplayItemSave(DisplayItemRequest displayItemRequest) throws QcastException { try { displayItemMapper.setStoreDisplayItemSave(displayItemRequest); } catch (Exception e) { throw new QcastException(ErrorCode.INTERNAL_SERVER_ERROR, e.getMessage()); } } /** * 아이템 목록 조회 * * @param itemRequest * @return * @throws QcastException */ public List getItemList(ItemRequest itemRequest) throws QcastException { try { return displayItemMapper.getItemList(itemRequest); } catch (Exception e) { throw new QcastException(ErrorCode.INTERNAL_SERVER_ERROR, e.getMessage()); } } /** * 아이템 상세 정보 조회 * * @param itemId * @return */ public ItemDetailResponse getItemDetail(String itemId) throws QcastException { try { ItemDetailResponse itemDetailResponse = displayItemMapper.getItemDetail(itemId); if (itemDetailResponse != null) { // BOM 헤더 아이템인 경우 BOM List를 내려준다. if ("ERLA".equals(itemDetailResponse.getItemCtgGr())) { List itemBomList = displayItemMapper.selectItemBomList(itemId); itemDetailResponse.setItemBomList(itemBomList); } // 견적특이사항 관련 데이터 셋팅 String[] arrItemId = {itemId}; NoteRequest noteRequest = new NoteRequest(); noteRequest.setArrItemId(arrItemId); noteRequest.setSchSpnTypeCd("PROD"); List noteItemList = estimateMapper.selectEstimateNoteItemList(noteRequest); String spnAttrCds = ""; for (NoteResponse noteResponse : noteItemList) { spnAttrCds += !StringUtils.isEmpty(spnAttrCds) ? "、" : ""; spnAttrCds += noteResponse.getCode(); } itemDetailResponse.setSpnAttrCds(spnAttrCds); } return itemDetailResponse; } catch (Exception e) { throw new QcastException(ErrorCode.INTERNAL_SERVER_ERROR, e.getMessage()); } } /** * 아이템 정보 동기화 * * @param itemSyncList 아이템 목록 * @return * @throws Exception */ public int setItemSyncSave(List itemSyncList) throws Exception { int cnt = 0; for (ItemSyncResponse itemSyncData : itemSyncList) { cnt += displayItemMapper.setItemSyncSave(itemSyncData); } return cnt; } /** * 아이템 정보 동기화 * * @param bomSyncList 아이템 목록 * @return * @throws Exception */ public int setBomSyncSave(List bomSyncList) throws Exception { int cnt = 0; for (BomSyncResponse bomSyncData : bomSyncList) { if ("D".equals(bomSyncData.getStatCd())) { // Bom 아이템 삭제 처리 cnt += displayItemMapper.deleteBomSync(bomSyncData); } else { // Bom 아이템 수정/등록 처리 cnt += displayItemMapper.setBomSyncSave(bomSyncData); } } return cnt; } /** * 아이템 가격 정보 동기화 * * @param priceItemSyncList 가격 목록 * @return * @throws Exception */ public int setPriceSyncSave(List priceItemSyncList) throws Exception { int cnt = 0; for (PriceItemSyncResponse priceItemSyncResponse : priceItemSyncList) { cnt += displayItemMapper.setPriceItemSyncSave(priceItemSyncResponse); } return cnt; } /** * 노출 아이템 동기화 - Batch * * @param displayItemList * @throws Exception */ public void setStoreDispItemBatch(List displayItemList) throws Exception { // 노출 아이템 동기화 for (DisplayItemRequest displayItemRequest : displayItemList) { try { displayItemMapper.setStoreDisplayItemSave(displayItemRequest); } catch (Exception e) { log.error(e.getMessage()); } } } }