package com.interplug.qcast.biz.canvasBasicSetting; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.stereotype.Service; import com.interplug.qcast.biz.canvasBasicSetting.dto.CanvasBasicSettingInfo; import com.interplug.qcast.biz.canvasBasicSetting.dto.CanvasBasicSettingResponse; import com.interplug.qcast.biz.canvasBasicSetting.dto.RoofAllocationInfo; import com.interplug.qcast.biz.canvasBasicSetting.dto.RoofMaterialsAddInfo; import com.interplug.qcast.config.Exception.ErrorCode; import com.interplug.qcast.config.Exception.QcastException; @Slf4j @Service @RequiredArgsConstructor public class CanvasBasicSettingService { private final CanvasBasicSettingMapper canvasBasicSettingMapper; // Canvas Basic Setting 조회(objectNo) public List selectCanvasBasicSetting(String objectNo) { return canvasBasicSettingMapper.selectCanvasBasicSetting(objectNo); } // Canvas Basic Setting 등록 public Map insertCanvasBasicSetting(CanvasBasicSettingInfo csi) throws QcastException { Map response = new HashMap<>(); if (csi.getObjectNo() == null) { throw new QcastException (ErrorCode.INVALID_INPUT_VALUE ,"올바르지 않은 입력값입니다."); } try { // 먼저 데이터가 존재하는지 확인 CanvasBasicSettingInfo cntData = canvasBasicSettingMapper.getCanvasBasicSettingCnt(csi.getObjectNo()); log.debug("cntData ::::: " + cntData); // 데이터가 존재하지 않으면 insert if (cntData.getRoofCnt().intValue() < 1) { // 도면/치수/각도 정보 insert canvasBasicSettingMapper.insertCanvasBasicSetting(csi); // for-each 루프를 사용하여 지붕재추가 Setting for (RoofMaterialsAddInfo rma : csi.getRoofMaterialsAddList()) { rma.setObjectNo(csi.getObjectNo()); // 신규 지붕재추가 정보 insert canvasBasicSettingMapper.insertRoofMaterialsAdd(rma); } response.put("objectNo", csi.getObjectNo()); response.put("returnMessage", "common.message.confirm.mark"); } else { // 도면/치수/각도 정보 update canvasBasicSettingMapper.updateCanvasBasicSetting(csi); // for-each 루프를 사용하여 지붕재추가 Setting for (RoofMaterialsAddInfo rma : csi.getRoofMaterialsAddList()) { rma.setObjectNo(csi.getObjectNo()); // 신규 지붕재추가 정보 insert canvasBasicSettingMapper.updateRoofMaterialsAdd(rma); } response.put("objectNo", csi.getObjectNo()); response.put("returnMessage", "common.message.confirm.mark"); } } catch (Exception e) { response.put("objectNo", csi.getObjectNo()); response.put("returnMessage", "common.message.save.error"); } // 생성된 objectNo 반환 return response; } // 지붕면 할당 Setting 등록 public Map insertRoofAllocSetting(CanvasBasicSettingInfo csi) throws QcastException { Map response = new HashMap<>(); if (csi.getObjectNo() == null) { throw new QcastException (ErrorCode.INVALID_INPUT_VALUE ,"올바르지 않은 입력값입니다."); } try { // 기존 지붕재추가 정보 삭제 후 insert canvasBasicSettingMapper.deleteRoofMaterialsAdd(csi.getObjectNo()); int roofSeq = 0; // for-each 루프를 사용하여 지붕재추가 Setting for (RoofAllocationInfo rai : csi.getRoofAllocationList()) { rai.setObjectNo(csi.getObjectNo()); rai.setRoofSeq(roofSeq++); //roofSeq는 순차적으로 새로 생성하여 insert // 신규 지붕재추가 정보 insert canvasBasicSettingMapper.insertRoofAllocation(rai); } response.put("objectNo", csi.getObjectNo()); response.put("returnMessage", "common.message.confirm.mark"); } catch (Exception e) { response.put("objectNo", csi.getObjectNo()); response.put("returnMessage", "common.message.save.error"); } // 생성된 objectNo 반환 return response; } // 지붕재추가 삭제 public void deleteRoofMaterialsAdd(String objectNo) throws QcastException { if (objectNo == null || objectNo.trim().isEmpty()) { throw new QcastException (ErrorCode.INVALID_INPUT_VALUE ,"올바르지 않은 입력값입니다."); } // 먼저 데이터가 존재하는지 확인 RoofMaterialsAddInfo cntData = canvasBasicSettingMapper.getRoofMaterialsCnt(objectNo); // 데이터가 존재하지 않으면 수정하지 않고 예외를 던짐 if (cntData.getRoofCnt().intValue() > 0) { canvasBasicSettingMapper.deleteRoofMaterialsAdd(objectNo); } else { throw new QcastException (ErrorCode.NOT_FOUND ,"삭제할 지붕재가 존재하지 않습니다."); } } }