From ed771c60a63b6427bb3e1ea8c0ec1aaeb8b2ae83 Mon Sep 17 00:00:00 2001 From: "LAPTOP-L3VE7KK2\\USER" Date: Thu, 31 Oct 2024 11:18:34 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B2=AC=EC=A0=81=EC=84=9C=20API=20=EB=B3=B5?= =?UTF-8?q?=EC=82=AC=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../biz/estimate/EstimateController.java | 9 +- .../qcast/biz/estimate/EstimateMapper.java | 3 + .../qcast/biz/estimate/EstimateService.java | 92 ++++++++- .../biz/estimate/dto/EstimateRequest.java | 3 + .../qcast/biz/object/ObjectService.java | 26 +++ .../mappers/estimate/estimateMapper.xml | 194 +++++++++++++----- .../resources/message/message_ja.properties | 165 +++++++-------- .../resources/message/message_ko.properties | 31 +-- 8 files changed, 377 insertions(+), 146 deletions(-) diff --git a/src/main/java/com/interplug/qcast/biz/estimate/EstimateController.java b/src/main/java/com/interplug/qcast/biz/estimate/EstimateController.java index 998f9a89..5df11dd3 100644 --- a/src/main/java/com/interplug/qcast/biz/estimate/EstimateController.java +++ b/src/main/java/com/interplug/qcast/biz/estimate/EstimateController.java @@ -46,7 +46,14 @@ public class EstimateController { @Operation(description = "견적서를 저장한다.") @PostMapping("/save-estimate") @ResponseStatus(HttpStatus.CREATED) - public void insertObject(@RequestBody EstimateRequest estimateRequest) throws Exception { + public void insertEstimate(@RequestBody EstimateRequest estimateRequest) throws Exception { estimateService.insertEstimate(estimateRequest); } + + @Operation(description = "견적서를 복사한다.") + @PostMapping("/save-estimate-copy") + @ResponseStatus(HttpStatus.CREATED) + public void insertEstimateCopy(@RequestBody EstimateRequest estimateRequest) throws Exception { + estimateService.insertEstimateCopy(estimateRequest); + } } diff --git a/src/main/java/com/interplug/qcast/biz/estimate/EstimateMapper.java b/src/main/java/com/interplug/qcast/biz/estimate/EstimateMapper.java index 4a2b88c5..ec70262b 100644 --- a/src/main/java/com/interplug/qcast/biz/estimate/EstimateMapper.java +++ b/src/main/java/com/interplug/qcast/biz/estimate/EstimateMapper.java @@ -33,4 +33,7 @@ public interface EstimateMapper { // 견적서 아이템 목록 삭제(물리 삭제) public int deleteEstimateItemList(EstimateRequest estimateRequest); + + // 견적서 복사 + public int insertEstimateCopy(EstimateRequest estimateRequest); } diff --git a/src/main/java/com/interplug/qcast/biz/estimate/EstimateService.java b/src/main/java/com/interplug/qcast/biz/estimate/EstimateService.java index 54b85c60..ce714fbd 100644 --- a/src/main/java/com/interplug/qcast/biz/estimate/EstimateService.java +++ b/src/main/java/com/interplug/qcast/biz/estimate/EstimateService.java @@ -7,12 +7,15 @@ import com.interplug.qcast.biz.file.dto.FileRequest; import com.interplug.qcast.biz.file.dto.FileResponse; import com.interplug.qcast.biz.object.ObjectMapper; import com.interplug.qcast.biz.object.dto.ObjectResponse; +import com.interplug.qcast.biz.object.dto.PlanRequest; +import com.interplug.qcast.biz.object.dto.PlanResponse; import com.interplug.qcast.config.Exception.ErrorCode; import com.interplug.qcast.config.Exception.QcastException; import com.interplug.qcast.config.message.Messages; import com.interplug.qcast.util.InterfaceQsp; import io.micrometer.common.util.StringUtils; import java.math.BigDecimal; +import java.util.ArrayList; import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -140,8 +143,8 @@ public class EstimateService { } else { // 아이템 목록 조회 - List itemList = estimateMapper.selectEstimateItemList(estimateRequest); - response.setItemList(itemList); + List estimateItemList = estimateMapper.selectEstimateItemList(estimateRequest); + response.setItemList(estimateItemList); // 총 합산금액 계산 this.selectTotalPriceInfo(response); @@ -387,6 +390,7 @@ public class EstimateService { } // 견적서 정보 수정 + estimateRequest.setPriceCd("UNIT_PRICE"); estimateMapper.updateEstimate(estimateRequest); // 견적서 모든 아이템 제거 @@ -408,6 +412,90 @@ public class EstimateService { } } + public void insertEstimateCopy(EstimateRequest estimateRequest) throws Exception { + // Validation + if (StringUtils.isEmpty(estimateRequest.getObjectNo())) { + throw new QcastException( + ErrorCode.INVALID_INPUT_VALUE, + message.getMessage("common.message.required.data", "Object No")); + } + if (StringUtils.isEmpty(estimateRequest.getPlanNo())) { + throw new QcastException( + ErrorCode.INVALID_INPUT_VALUE, + message.getMessage("common.message.required.data", "Plan No")); + } + + // [1]. 총 플랜 목록 조회 및 제약조건 처리 (플랜 10개까지만 등록) + PlanRequest planRequest = new PlanRequest(); + planRequest.setObjectNo(estimateRequest.getObjectNo()); + List planList = objectMapper.selectPlanList(planRequest); + if (planList.size() > 9) { + throw new QcastException( + ErrorCode.INTERNAL_SERVER_ERROR, message.getMessage("common.message.plan.save.limit")); + } + + List itemList = new ArrayList(); + List estimateItemList = estimateMapper.selectEstimateItemList(estimateRequest); + for (ItemResponse itemResponse : estimateItemList) { + ItemRequest itemRequest = new ItemRequest(); + itemRequest.setItemId(itemResponse.getItemId()); + itemRequest.setAmount(itemResponse.getAmount()); + + itemList.add(itemRequest); + } + + // [2]. 아이템 관련 데이터 셋팅 (복사 시 정가 셋팅) + String[] arrItemId = new String[itemList.size()]; + int i = 0; + for (ItemRequest itemRequest : itemList) { + arrItemId[i++] = itemRequest.getItemId(); + } + estimateRequest.setArrItemId(arrItemId); + // 아이템의 마스터 정보 및 정가 정보 조회 + List itemResponseList = estimateMapper.selectItemMasterList(estimateRequest); + + int j = 1; + for (ItemRequest itemRequest : itemList) { + itemRequest.setDispOrder(String.valueOf(j++)); + + for (ItemResponse itemResponse : itemResponseList) { + if (itemRequest.getItemId().equals(itemResponse.getItemId())) { + itemRequest.setItemNo(itemResponse.getItemNo()); + itemRequest.setItemName(itemResponse.getItemName()); + itemRequest.setUnit(itemResponse.getUnit()); + itemRequest.setPnowW(itemResponse.getPnowW()); + itemRequest.setSpecification(itemResponse.getPnowW()); + itemRequest.setUnitPrice(itemResponse.getSalePrice()); + itemRequest.setSalePrice(itemResponse.getSalePrice()); + itemRequest.setPkgMaterialFlg(itemResponse.getPkgMaterialFlg()); + itemRequest.setItemGroup(itemResponse.getItemGroup()); + + break; + } + } + } + + // 견적서 복사 + estimateMapper.insertEstimateCopy(estimateRequest); + + // 견적서 아이템 복사 + for (ItemRequest itemRequest : itemList) { + itemRequest.setObjectNo(estimateRequest.getObjectNo()); + itemRequest.setPlanNo(estimateRequest.getCopyPlanNo()); + itemRequest.setPartAdd( + !StringUtils.isEmpty(itemRequest.getPartAdd()) ? itemRequest.getPartAdd() : "0"); + itemRequest.setItemChangeFlg( + !StringUtils.isEmpty(itemRequest.getItemChangeFlg()) + ? itemRequest.getItemChangeFlg() + : "0"); + itemRequest.setUserId(estimateRequest.getUserId()); + + estimateMapper.insertEstimateItem(itemRequest); + } + + // 도면 복사 (추후 개발 필요) + } + public void selectTotalPriceInfo(EstimateResponse estimateResponse) throws Exception { BigDecimal totAmount = BigDecimal.ZERO; BigDecimal totVol = BigDecimal.ZERO; diff --git a/src/main/java/com/interplug/qcast/biz/estimate/dto/EstimateRequest.java b/src/main/java/com/interplug/qcast/biz/estimate/dto/EstimateRequest.java index dba3d993..b44bc869 100644 --- a/src/main/java/com/interplug/qcast/biz/estimate/dto/EstimateRequest.java +++ b/src/main/java/com/interplug/qcast/biz/estimate/dto/EstimateRequest.java @@ -147,6 +147,9 @@ public class EstimateRequest { @Schema(description = "비고") private String remarks; + @Schema(description = "복사 플랜번호") + private String copyPlanNo; + @Schema(description = "아이템번호 목록") private String[] arrItemId; diff --git a/src/main/java/com/interplug/qcast/biz/object/ObjectService.java b/src/main/java/com/interplug/qcast/biz/object/ObjectService.java index 4f204bed..72bae669 100644 --- a/src/main/java/com/interplug/qcast/biz/object/ObjectService.java +++ b/src/main/java/com/interplug/qcast/biz/object/ObjectService.java @@ -427,6 +427,13 @@ public class ObjectService { message.getMessage("common.message.required.data", "Object No")); } + // Plan 추가 가능 체크 + List planList = objectMapper.selectPlanList(planRequest); + if (planList.size() > 9) { + throw new QcastException( + ErrorCode.INTERNAL_SERVER_ERROR, message.getMessage("common.message.plan.save.limit")); + } + // 추가 Plan 등록 planRequest.setRoofKindId("0"); planRequest.setStatus("1"); @@ -441,6 +448,25 @@ public class ObjectService { } public void deletePlan(PlanRequest planRequest) throws Exception { + // Validation + if (StringUtils.isEmpty(planRequest.getObjectNo())) { + throw new QcastException( + ErrorCode.INVALID_INPUT_VALUE, + message.getMessage("common.message.required.data", "Object No")); + } + if (StringUtils.isEmpty(planRequest.getPlanNo())) { + throw new QcastException( + ErrorCode.INVALID_INPUT_VALUE, + message.getMessage("common.message.required.data", "Plan No")); + } + + // Plan 삭제 가능 체크 + List planList = objectMapper.selectPlanList(planRequest); + if (planList.size() < 2) { + throw new QcastException( + ErrorCode.INTERNAL_SERVER_ERROR, message.getMessage("common.message.plan.delete.limit")); + } + // Plan 삭제 objectMapper.deletePlan(planRequest); } diff --git a/src/main/resources/mappers/estimate/estimateMapper.xml b/src/main/resources/mappers/estimate/estimateMapper.xml index faf76b52..b16ba859 100644 --- a/src/main/resources/mappers/estimate/estimateMapper.xml +++ b/src/main/resources/mappers/estimate/estimateMapper.xml @@ -6,49 +6,49 @@