package com.interplug.qcast.biz.canvaspopupstatus; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.interplug.qcast.biz.canvasBasicSetting.CanvasBasicSettingMapper; import com.interplug.qcast.biz.canvasBasicSetting.dto.CanvasBasicSettingResponse; import com.interplug.qcast.biz.canvaspopupstatus.dto.CanvasPopupStatus; import com.interplug.qcast.biz.estimate.dto.EstimateApiResponse; import com.interplug.qcast.config.Exception.ErrorCode; import com.interplug.qcast.config.Exception.QcastException; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; @Service @RequiredArgsConstructor @Transactional(readOnly = true) public class CanvasPopupStatusService { private final CanvasPopupStatusMapper canvasPopupStatusMapper; private final CanvasBasicSettingMapper canvasBasicSettingMapper; /** * Canvas Popup Status 조회 * * @param objectNo 조회할 object 번호 * @param planNo 조회할 plan 번호 * @param popupType 조회할 popup 타입 * @return 조회된 CanvasPopupStatus 객체, 조회된 데이터가 없을 경우 빈 객체 반환 */ public CanvasPopupStatus selectCanvasPopupStatus( String objectNo, Integer planNo, String popupType) throws QcastException { CanvasPopupStatus request = CanvasPopupStatus.builder().objectNo(objectNo).planNo(planNo).popupType(popupType).build(); CanvasPopupStatus cps = canvasPopupStatusMapper.selectCanvasPopupStatus(request); return cps != null ? cps : CanvasPopupStatus.builder().build(); } /** * Canvas Popup Status 저장 - 이미 존재하는 데이터인 경우 수정, 없는 경우 생성 * * @param cps 저장할 CanvasPopupStatus 객체 * @throws QcastException 저장 중 예외 발생 시 */ @Transactional public void saveCanvasPopupStatus(CanvasPopupStatus cps) throws QcastException { CanvasPopupStatus chk = canvasPopupStatusMapper.selectCanvasPopupStatus(cps); if (chk == null) { createCanvasPopupStatus(cps); } else { updateCanvasPopupStatus(cps); } //기초정보 업데이트 (roofHajebichi) String hajebichi = cps.getHajebichi(); if(hajebichi != null && !hajebichi.isEmpty()){ CanvasBasicSettingResponse canvasBasicSettingResponse = new CanvasBasicSettingResponse(); canvasBasicSettingResponse.setObjectNo(cps.getObjectNo()); canvasBasicSettingResponse.setPlanNo(cps.getPlanNo()); canvasBasicSettingResponse.setRoofHajebichi(Integer.valueOf(hajebichi)); canvasBasicSettingMapper.updateHajebichRoofMaterialsAdd(canvasBasicSettingResponse); } // String popupStatus = cps.getPopupStatus(); // List hajebichiList = new ArrayList<>();//getHajebichiValues(popupStatus, 0, 1); // roofIndex=0, planNo=1인 hajebichi 값들 조회 // // try { // ObjectMapper mapper = new ObjectMapper(); // JsonNode rootNode = mapper.readTree(popupStatus); // JsonNode roofConstructions = rootNode.get("roofConstructions"); // if (roofConstructions.isArray()) { // for (JsonNode construction : roofConstructions) { // JsonNode addRoof = construction.get("addRoof"); // if (addRoof != null // && addRoof.get("roofIndex").asInt() == 0 // && addRoof.get("planNo").asInt() == cps.getPlanNo()) { // hajebichiList.add(addRoof.get("hajebichi").asInt()); // } // } // } // // } catch (JsonProcessingException e) { // throw new QcastException(ErrorCode.INTERNAL_SERVER_ERROR, "JSON 파싱 오류"); // } // if(!hajebichiList.isEmpty()){ // CanvasBasicSettingResponse canvasBasicSettingResponse = new CanvasBasicSettingResponse(); // canvasBasicSettingResponse.setObjectNo(cps.getObjectNo()); // canvasBasicSettingResponse.setPlanNo(cps.getPlanNo()); // canvasBasicSettingResponse.setRoofHajebichi(hajebichiList.get(0)); // // if(canvasBasicSettingResponse.getRoofHajebichi() > 0){ // canvasBasicSettingMapper.updateHajebichRoofMaterialsAdd(canvasBasicSettingResponse); // } // // } } /** * Canvas Popup Status 생성 * * @param cps 생성할 CanvasPopupStatus 객체 * @throws QcastException 생성 중 예외 발생 시 */ @Transactional public void createCanvasPopupStatus(CanvasPopupStatus cps) throws QcastException { try { canvasPopupStatusMapper.insertCanvasPopupStatus(cps); } catch (Exception e) { throw new QcastException(ErrorCode.INTERNAL_SERVER_ERROR, e.getMessage()); } } /** * Canvas Popup Status 수정 * * @param cps 수정할 CanvasPopupStatus 객체 * @throws QcastException 수정 중 예외 발생 시 */ public void updateCanvasPopupStatus(CanvasPopupStatus cps) throws QcastException { try { canvasPopupStatusMapper.updateCanvasPopupStatus(cps); } catch (Exception e) { throw new QcastException(ErrorCode.INTERNAL_SERVER_ERROR, e.getMessage()); } } /** * Canvas Popup Status 삭제 * * @param cps 삭제할 CanvasPopupStatus 객체 * @throws QcastException 삭제 중 예외 발생 시 */ public void deleteCanvasPopupStatus(CanvasPopupStatus cps) throws QcastException { try { canvasPopupStatusMapper.deleteCanvasPopupStatus(cps); } catch (Exception e) { throw new QcastException(ErrorCode.INTERNAL_SERVER_ERROR, e.getMessage()); } } }