diff --git a/src/main/java/com/interplug/qcast/biz/canvasBasicSetting/CanvasBasicSettingController.java b/src/main/java/com/interplug/qcast/biz/canvasBasicSetting/CanvasBasicSettingController.java index 8c3a6c2a..123db445 100644 --- a/src/main/java/com/interplug/qcast/biz/canvasBasicSetting/CanvasBasicSettingController.java +++ b/src/main/java/com/interplug/qcast/biz/canvasBasicSetting/CanvasBasicSettingController.java @@ -2,6 +2,7 @@ package com.interplug.qcast.biz.canvasBasicSetting; import com.interplug.qcast.biz.canvasBasicSetting.dto.CanvasBasicSettingInfo; import com.interplug.qcast.biz.canvasBasicSetting.dto.CanvasBasicSettingResponse; +import com.interplug.qcast.config.Exception.QcastException; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -23,22 +24,29 @@ public class CanvasBasicSettingController { private final CanvasBasicSettingService canvasBasicSettingService; @Operation(description = "Canvas Basic Setting 정보를 조회 한다.") - @GetMapping("/canvas-basic-settings/by-object/{objectNo}") - public List selectCanvasBasicSetting(@PathVariable String objectNo) { + @GetMapping("/canvas-basic-settings/by-object/{objectNo}/{roofApply}") + public List selectCanvasBasicSetting(@PathVariable String objectNo, @PathVariable String roofSeq) { - log.debug("Basic Setting 조회 ::::: " + objectNo); + log.debug("Basic Setting 조회 ::::: " + objectNo + " " + roofSeq); - return canvasBasicSettingService.selectCanvasBasicSetting(objectNo); + return canvasBasicSettingService.selectCanvasBasicSetting(objectNo, roofSeq); } @Operation(description = "Canvas Basic Setting 정보를 등록 한다.") @PostMapping("/canvas-basic-settings") @ResponseStatus(HttpStatus.CREATED) - public Map insertCanvasBasicSetting(@RequestBody CanvasBasicSettingInfo csi) { + public Map insertCanvasBasicSetting(@RequestBody CanvasBasicSettingInfo csi) throws QcastException { log.debug("Basic Setting 등록 ::::: " + csi.getObjectNo()); return canvasBasicSettingService.insertCanvasBasicSetting(csi); } + @Operation(description = "Canvas 지붕재추가 Setting 정보를 삭제 한다.") + @DeleteMapping("/canvas-basic-settings/delete-RoofMaterials/{objectNo}/{roofApply}") + @ResponseStatus(HttpStatus.NO_CONTENT) + public void deleteRoofMaterialsAdd(@PathVariable String objectNo, @PathVariable String roofSeq) throws QcastException { + canvasBasicSettingService.deleteRoofMaterialsAdd(objectNo, roofSeq); + } + } diff --git a/src/main/java/com/interplug/qcast/biz/canvasBasicSetting/CanvasBasicSettingMapper.java b/src/main/java/com/interplug/qcast/biz/canvasBasicSetting/CanvasBasicSettingMapper.java index 153fccf7..ec8ed1ba 100644 --- a/src/main/java/com/interplug/qcast/biz/canvasBasicSetting/CanvasBasicSettingMapper.java +++ b/src/main/java/com/interplug/qcast/biz/canvasBasicSetting/CanvasBasicSettingMapper.java @@ -11,16 +11,28 @@ import com.interplug.qcast.biz.canvasBasicSetting.dto.RoofMaterialsAddInfo; @Mapper public interface CanvasBasicSettingMapper { + // Canvas Basic Setting 유무 조회 + public CanvasBasicSettingInfo getCanvasBasicSettingCnt(String objectNo); + // Canvas Basic Setting 조회(objectNo) - public List selectCanvasBasicSetting(String objectNo); + public List selectCanvasBasicSetting(String objectNo, String roofSeq); // Canvas Basic Setting 등록 public void insertCanvasBasicSetting(CanvasBasicSettingInfo csi); + // Canvas Basic Setting 수정 + public void updateCanvasBasicSetting(CanvasBasicSettingInfo csi); + + // Canvas 지붕재추가 Setting 유무 조회 + public RoofMaterialsAddInfo getRoofMaterialsCnt(String objectNo, String roofSeq); + // Canvas 지붕재추가 Setting 등록 public void insertRoofMaterialsAdd(RoofMaterialsAddInfo rma); + + // Canvas 지붕재추가 Setting 수정 + public void updateRoofMaterialsAdd(RoofMaterialsAddInfo rma); // Canvas 지붕재추가 Setting 삭제 - public void deleteRoofMaterialsAdd(String objectNo); + public void deleteRoofMaterialsAdd(String objectNo, String roofSeq); } \ No newline at end of file diff --git a/src/main/java/com/interplug/qcast/biz/canvasBasicSetting/CanvasBasicSettingService.java b/src/main/java/com/interplug/qcast/biz/canvasBasicSetting/CanvasBasicSettingService.java index ee5d05a6..5eb934ac 100644 --- a/src/main/java/com/interplug/qcast/biz/canvasBasicSetting/CanvasBasicSettingService.java +++ b/src/main/java/com/interplug/qcast/biz/canvasBasicSetting/CanvasBasicSettingService.java @@ -11,6 +11,8 @@ 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.RoofMaterialsAddInfo; +import com.interplug.qcast.config.Exception.ErrorCode; +import com.interplug.qcast.config.Exception.QcastException; @Service @RequiredArgsConstructor @@ -18,35 +20,57 @@ public class CanvasBasicSettingService { private final CanvasBasicSettingMapper canvasBasicSettingMapper; // Canvas Basic Setting 조회(objectNo) - public List selectCanvasBasicSetting(String objectNo) { - return canvasBasicSettingMapper.selectCanvasBasicSetting(objectNo); + public List selectCanvasBasicSetting(String objectNo, String roofSeq) { + return canvasBasicSettingMapper.selectCanvasBasicSetting(objectNo, roofSeq); } // Canvas Basic Setting 등록 - public Map insertCanvasBasicSetting(CanvasBasicSettingInfo csi) { + public Map insertCanvasBasicSetting(CanvasBasicSettingInfo csi) throws QcastException { Map response = new HashMap<>(); + + if (csi.getObjectNo() == null) { + throw new QcastException (ErrorCode.INVALID_INPUT_VALUE ,"올바르지 않은 입력값입니다."); + } try { - // 도면/치수/각도 정보 insert/update - canvasBasicSettingMapper.insertCanvasBasicSetting(csi); + // 먼저 데이터가 존재하는지 확인 + CanvasBasicSettingInfo cntData = canvasBasicSettingMapper.getCanvasBasicSettingCnt(csi.getObjectNo()); - // 기존 지붕재추가 정보 삭제 후 insert - canvasBasicSettingMapper.deleteRoofMaterialsAdd(csi.getObjectNo()); - - int roofSeq = 1; - // for-each 루프를 사용하여 지붕재추가 Setting - for (RoofMaterialsAddInfo rma : csi.getRoofMaterialsAddList()) { - - rma.setObjectNo(csi.getObjectNo()); - rma.setRoofSeq(roofSeq++); //roofSeq는 순차적으로 새로 생성하여 insert - - // 신규 지붕재추가 정보 insert - canvasBasicSettingMapper.insertRoofMaterialsAdd(rma); - } - response.put("objectNo", csi.getObjectNo()); - response.put("returnMessage", "common.message.confirm.mark"); + // 데이터가 존재하지 않으면 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()); @@ -57,5 +81,24 @@ public class CanvasBasicSettingService { return response; } + + // 지붕재추가 삭제 + public void deleteRoofMaterialsAdd(String objectNo, String roofSeq) throws QcastException { + + if (objectNo == null || objectNo.trim().isEmpty() || roofSeq == null || roofSeq.trim().isEmpty()) { + throw new QcastException (ErrorCode.INVALID_INPUT_VALUE ,"올바르지 않은 입력값입니다."); + } + + // 먼저 데이터가 존재하는지 확인 + RoofMaterialsAddInfo cntData = canvasBasicSettingMapper.getRoofMaterialsCnt(objectNo, roofSeq); + + // 데이터가 존재하지 않으면 수정하지 않고 예외를 던짐 + if (cntData.getRoofCnt().intValue() > 0) { + canvasBasicSettingMapper.deleteRoofMaterialsAdd(objectNo, roofSeq); + } else { + throw new QcastException (ErrorCode.NOT_FOUND ,"삭제할 지붕재가 존재하지 않습니다."); + } + + } } diff --git a/src/main/java/com/interplug/qcast/biz/canvasBasicSetting/dto/CanvasBasicSettingInfo.java b/src/main/java/com/interplug/qcast/biz/canvasBasicSetting/dto/CanvasBasicSettingInfo.java index c4ba2b9f..b0152ba3 100644 --- a/src/main/java/com/interplug/qcast/biz/canvasBasicSetting/dto/CanvasBasicSettingInfo.java +++ b/src/main/java/com/interplug/qcast/biz/canvasBasicSetting/dto/CanvasBasicSettingInfo.java @@ -11,8 +11,9 @@ import lombok.Setter; public class CanvasBasicSettingInfo { private String objectNo; //견적서 번호 - private int roofSizeSet; //치수(복사도/실측값/육지붕) + private Integer roofSizeSet; //치수(복사도/실측값/육지붕) private String roofAngleSet; //각도(경사/각도) + private Integer roofCnt; //존재여부 private Date registDatetime; //생성일시 private Date lastEditDatetime; //수정일시 diff --git a/src/main/java/com/interplug/qcast/biz/canvasBasicSetting/dto/RoofMaterialsAddInfo.java b/src/main/java/com/interplug/qcast/biz/canvasBasicSetting/dto/RoofMaterialsAddInfo.java index 8ff27024..4e708244 100644 --- a/src/main/java/com/interplug/qcast/biz/canvasBasicSetting/dto/RoofMaterialsAddInfo.java +++ b/src/main/java/com/interplug/qcast/biz/canvasBasicSetting/dto/RoofMaterialsAddInfo.java @@ -11,13 +11,14 @@ public class RoofMaterialsAddInfo { private String objectNo; //견적서 번호 private boolean roofApply; //적용 - private int roofSeq; //순번 SEQ + private Integer roofSeq; //순번 SEQ private String roofMatlCd; //타입 - private int roofWidth; //넓이 - private int roofHeight; //높이 - private int roofHajebichi; //하제비치 + private Integer roofWidth; //넓이 + private Integer roofHeight; //높이 + private Integer roofHajebichi; //하제비치 private String roofGap; //간격 private String roofLayout; //방식 + private Integer roofCnt; //존재여부 private Date registDatetime; //생성일시 private Date lastEditDatetime; //수정일시 diff --git a/src/main/resources/mappers/canvasBasicSetting/canvasBasicSettingMapper.xml b/src/main/resources/mappers/canvasBasicSetting/canvasBasicSettingMapper.xml index 978841bc..a748137f 100644 --- a/src/main/resources/mappers/canvasBasicSetting/canvasBasicSettingMapper.xml +++ b/src/main/resources/mappers/canvasBasicSetting/canvasBasicSettingMapper.xml @@ -2,6 +2,14 @@ + + - /* sqlid : com.interplug.qcast.canvasBasicSetting.insertCanvasBasicSetting Canvas Basic Setting 등록 */ - MERGE TB_CANVAS_BASIC_SETUP AS target - USING (SELECT #{objectNo} AS object_no) AS source - ON (target.object_no = source.object_no) - WHEN MATCHED THEN - UPDATE - SET roof_size_set = #{roofSizeSet} - , roof_angle_set = #{roofAngleSet} - , last_edit_datetime = GETDATE() - - WHEN NOT MATCHED THEN - INSERT + /* sqlid : com.interplug.qcast.canvasBasicSetting.insertCanvasBasicSetting Canvas Basic Setting 등록 */ + INSERT INTO TB_CANVAS_BASIC_SETUP ( object_no , roof_size_set @@ -52,7 +50,25 @@ ); - + + /* sqlid : com.interplug.qcast.canvasBasicSetting.updateCanvasBasicSetting Canvas Basic Setting 수정 */ + UPDATE TB_CANVAS_BASIC_SETUP + SET roof_size_set = #{roofSizeSet} + , roof_angle_set = #{roofAngleSet} + , last_edit_datetime = GETDATE() + WHERE object_no = #{objectNo} + + + + + /* sqlid : com.interplug.qcast.canvasBasicSetting.insertRoofMaterialsAdd Canvas 지붕재추가 Setting 등록 */ INSERT INTO TB_CANVAS_ROOF_MATERIALS_ADD ( @@ -65,7 +81,7 @@ , roof_hajebichi , roof_gap , roof_layout - , regist_datetime + , regist_datetime , last_edit_datetime ) VALUES ( @@ -83,11 +99,27 @@ ); + + /* sqlid : com.interplug.qcast.canvasBasicSetting.updateRoofMaterialsAdd Canvas 지붕재추가 Setting 수정 */ + UPDATE TB_CANVAS_ROOF_MATERIALS_ADD + SET roof_apply + , roof_seq = #{roofSeqv} + , roof_matl_cd = #{roofMatlCd} + , roof_width = #{roofWidth} + , roof_height = #{roofHeight} + , roof_hajebichi = #{roofHajebichi} + , roof_gap = #{roofGap} + , roof_layout = #{roofLayout} + , last_edit_datetime = GETDATE() + WHERE object_no = #{objectNo} + AND roof_seq = #{roofApply} + + /* sqlid : com.interplug.qcast.canvasBasicSetting.deleteRoofMaterialsAdd Canvas 지붕재추가 Setting 삭제 */ DELETE FROM TB_CANVAS_ROOF_MATERIALS_ADD WHERE object_no = #{objectNo} - AND roof_seq = 1 + AND roof_seq = #{roofSeq} \ No newline at end of file