From b1d9f227c763c0ba5a94cd8758fce7d1a5e0177f Mon Sep 17 00:00:00 2001 From: "LAPTOP-L3VE7KK2\\USER" Date: Wed, 30 Oct 2024 17:37:30 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B2=AC=EC=A0=81=EC=84=9C=20=ED=8A=B9?= =?UTF-8?q?=EC=9D=B4=EC=82=AC=ED=95=AD=20=EC=B2=98=EB=A6=AC=20=EB=B0=8F=20?= =?UTF-8?q?=EC=95=84=EC=9D=B4=ED=85=9C=20=EC=A0=95=EA=B0=80=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EC=A0=80=EC=9E=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../displayItem/DisplayItemController.java | 4 +- .../biz/displayItem/DisplayItemService.java | 29 +++++++- .../biz/displayItem/dto/ItemResponse.java | 3 + .../qcast/biz/estimate/EstimateMapper.java | 14 ++-- .../qcast/biz/estimate/EstimateService.java | 60 ++++++++++++++++ .../biz/estimate/dto/EstimateRequest.java | 8 ++- .../biz/estimate/dto/EstimateResponse.java | 6 ++ .../qcast/biz/estimate/dto/ItemRequest.java | 3 + .../qcast/biz/estimate/dto/NoteRequest.java | 13 ++++ .../qcast/biz/estimate/dto/NoteResponse.java | 16 +++++ .../mappers/estimate/estimateMapper.xml | 72 ++++++++++++++++++- 11 files changed, 219 insertions(+), 9 deletions(-) create mode 100644 src/main/java/com/interplug/qcast/biz/estimate/dto/NoteRequest.java create mode 100644 src/main/java/com/interplug/qcast/biz/estimate/dto/NoteResponse.java diff --git a/src/main/java/com/interplug/qcast/biz/displayItem/DisplayItemController.java b/src/main/java/com/interplug/qcast/biz/displayItem/DisplayItemController.java index a5da9ee9..71025bca 100644 --- a/src/main/java/com/interplug/qcast/biz/displayItem/DisplayItemController.java +++ b/src/main/java/com/interplug/qcast/biz/displayItem/DisplayItemController.java @@ -27,7 +27,7 @@ public class DisplayItemController { } @Operation(description = "제품 목록을 조회한다.") - @GetMapping("/item_list") + @GetMapping("/item-list") @ResponseStatus(HttpStatus.OK) public List getItemList(@RequestParam("saleStoreId") String saleStoreId) throws Exception { @@ -35,7 +35,7 @@ public class DisplayItemController { } @Operation(description = "제품 상세 정보를 조회한다.") - @GetMapping("/item_detail") + @GetMapping("/item-detail") @ResponseStatus(HttpStatus.OK) public ItemResponse getItemDetail(@RequestParam("itemId") String itemId) throws Exception { return displayItemService.getItemDetail(itemId); diff --git a/src/main/java/com/interplug/qcast/biz/displayItem/DisplayItemService.java b/src/main/java/com/interplug/qcast/biz/displayItem/DisplayItemService.java index 01a5c442..20c886f8 100644 --- a/src/main/java/com/interplug/qcast/biz/displayItem/DisplayItemService.java +++ b/src/main/java/com/interplug/qcast/biz/displayItem/DisplayItemService.java @@ -2,6 +2,10 @@ package com.interplug.qcast.biz.displayItem; import com.interplug.qcast.biz.displayItem.dto.DisplayItemRequest; import com.interplug.qcast.biz.displayItem.dto.ItemResponse; +import com.interplug.qcast.biz.estimate.EstimateMapper; +import com.interplug.qcast.biz.estimate.dto.NoteRequest; +import com.interplug.qcast.biz.estimate.dto.NoteResponse; +import io.micrometer.common.util.StringUtils; import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -12,6 +16,8 @@ import org.springframework.stereotype.Service; @RequiredArgsConstructor public class DisplayItemService { + private final EstimateMapper estimateMapper; + private final DisplayItemMapper displayItemMapper; public void setStoreDisplayItemSave(DisplayItemRequest displayItemRequest) throws Exception { @@ -23,6 +29,27 @@ public class DisplayItemService { } public ItemResponse getItemDetail(String itemId) { - return displayItemMapper.getItemDetail(itemId); + + ItemResponse itemResponse = displayItemMapper.getItemDetail(itemId); + + if (itemResponse != null) { + // 견적특이사항 관련 데이터 셋팅 + 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(); + } + + itemResponse.setSpnAttrCds(spnAttrCds); + } + + return itemResponse; } } diff --git a/src/main/java/com/interplug/qcast/biz/displayItem/dto/ItemResponse.java b/src/main/java/com/interplug/qcast/biz/displayItem/dto/ItemResponse.java index 740f94d2..72814127 100644 --- a/src/main/java/com/interplug/qcast/biz/displayItem/dto/ItemResponse.java +++ b/src/main/java/com/interplug/qcast/biz/displayItem/dto/ItemResponse.java @@ -38,4 +38,7 @@ public class ItemResponse { @Schema(description = "Sale Price") private String salePrice; + + @Schema(description = "견적 특이사항 코드") + private String spnAttrCds; } 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 3972bc7f..4a2b88c5 100644 --- a/src/main/java/com/interplug/qcast/biz/estimate/EstimateMapper.java +++ b/src/main/java/com/interplug/qcast/biz/estimate/EstimateMapper.java @@ -1,9 +1,6 @@ package com.interplug.qcast.biz.estimate; -import com.interplug.qcast.biz.estimate.dto.EstimateRequest; -import com.interplug.qcast.biz.estimate.dto.EstimateResponse; -import com.interplug.qcast.biz.estimate.dto.ItemRequest; -import com.interplug.qcast.biz.estimate.dto.ItemResponse; +import com.interplug.qcast.biz.estimate.dto.*; import com.interplug.qcast.biz.object.dto.*; import java.util.List; import org.apache.ibatis.annotations.Mapper; @@ -19,6 +16,15 @@ public interface EstimateMapper { // 아이템 마스터 목록 조회 public List selectItemMasterList(EstimateRequest estimateRequest); + // 아이템 마스터 목록 조회 + public List selectEstimateNoteList(NoteRequest noteRequest); + + // 아이템 마스터 목록 조회 + public List selectEstimateNoteItemList(NoteRequest noteRequest); + + // 물건정보 수정 + public int updateObject(EstimateRequest estimateRequest); + // 견적서 정보 수정 public int updateEstimate(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 c3d8494f..54b85c60 100644 --- a/src/main/java/com/interplug/qcast/biz/estimate/EstimateService.java +++ b/src/main/java/com/interplug/qcast/biz/estimate/EstimateService.java @@ -276,6 +276,7 @@ public class EstimateService { 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()); @@ -284,6 +285,56 @@ public class EstimateService { } } } + + // [4]. 견적특이사항 관련 데이터 셋팅 + NoteRequest noteRequest = new NoteRequest(); + noteRequest.setArrItemId(arrItemId); + noteRequest.setSchSpnTypeCd("COMM"); + List noteList = estimateMapper.selectEstimateNoteList(noteRequest); + noteRequest.setSchSpnTypeCd("PROD"); + List noteItemList = estimateMapper.selectEstimateNoteItemList(noteRequest); + + // 견적특이사항 코드 + String estimateOptions = ""; + for (NoteResponse noteResponse : noteList) { + if ("ATTR001".equals(noteResponse.getCode())) { + estimateOptions += !StringUtils.isEmpty(estimateOptions) ? splitStr : ""; + estimateOptions += "ATTR001"; // 공통 필수체크 + } else if ("ATTR002".equals(noteResponse.getCode())) { + estimateOptions += !StringUtils.isEmpty(estimateOptions) ? splitStr : ""; + estimateOptions += "ATTR002"; // YJOD 필수체크 + } else if ("ATTR003".equals(noteResponse.getCode())) { + estimateOptions += !StringUtils.isEmpty(estimateOptions) ? splitStr : ""; + estimateOptions += "ATTR003"; // 출력제어시간 기본 체크 + } else if ("ATTR004".equals(noteResponse.getCode()) + && "1".equals(estimateRequest.getNorthArrangement())) { + estimateOptions += !StringUtils.isEmpty(estimateOptions) ? splitStr : ""; + estimateOptions += "ATTR004"; // 북면설치 체크 + } else if ("ATTR005".equals(noteResponse.getCode()) + && "1".equals(objectResponse.getSaltAreaFlg())) { + estimateOptions += !StringUtils.isEmpty(estimateOptions) ? splitStr : ""; + estimateOptions += "ATTR005"; // 염해지역 체크 + } else if ("ATTR006".equals(objectResponse.getColdRegionFlg()) + && "1".equals(estimateRequest.getNorthArrangement())) { + estimateOptions += !StringUtils.isEmpty(estimateOptions) ? splitStr : ""; + estimateOptions += "ATTR006"; // 적설지역 체크 + } else if ("ATTR007".equals(noteResponse.getCode())) { + estimateOptions += !StringUtils.isEmpty(estimateOptions) ? splitStr : ""; + estimateOptions += "ATTR007"; // 지붕재치수, 레이아웃 기본 체크 + } else if ("ATTR008".equals(noteResponse.getCode())) { + estimateOptions += !StringUtils.isEmpty(estimateOptions) ? splitStr : ""; + estimateOptions += "ATTR008"; // 별도비용 기본 체크 + } else if ("ATTR009".equals(noteResponse.getCode())) { + estimateOptions += !StringUtils.isEmpty(estimateOptions) ? splitStr : ""; + estimateOptions += "ATTR009"; // 과적재 기본 체크 + } + } + for (NoteResponse noteResponse : noteItemList) { + estimateOptions += !StringUtils.isEmpty(estimateOptions) ? splitStr : ""; + estimateOptions += noteResponse.getCode(); + } + + estimateRequest.setEstimateOption(estimateOptions); } // 아아템 목록 필수 값 체크 @@ -326,6 +377,15 @@ public class EstimateService { estimateRequest.setModuleModel(moduleModel); estimateRequest.setPcTypeNo(pcTypeNo); + // 물건정보 수정 + if (!StringUtils.isEmpty(estimateRequest.getObjectName()) + || !StringUtils.isEmpty(estimateRequest.getSurfaceType()) + || !StringUtils.isEmpty(estimateRequest.getSetupHeight()) + || !StringUtils.isEmpty(estimateRequest.getStandardWindSpeedId()) + || !StringUtils.isEmpty(estimateRequest.getSnowfall())) { + estimateMapper.updateObject(estimateRequest); + } + // 견적서 정보 수정 estimateMapper.updateEstimate(estimateRequest); 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 cb385e5d..dba3d993 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 @@ -18,6 +18,9 @@ public class EstimateRequest { @Schema(description = "SAP 판매점코드") private String sapSalesStoreCd; + @Schema(description = "안건명") + private String objectName; + @Schema(description = "시공방법") private String constructSpecification; @@ -27,7 +30,7 @@ public class EstimateRequest { @Schema(description = "날씨포인트") private String weatherPoint; - @Schema(description = "날씨포인트") + @Schema(description = "지붕재 종류 ID") private String roofKindId; @Schema(description = "경사") @@ -60,6 +63,9 @@ public class EstimateRequest { @Schema(description = "시스템용량") private String capacity; + @Schema(description = "면조도구분") + private String surfaceType; + @Schema(description = "강설량") private String snowfall; diff --git a/src/main/java/com/interplug/qcast/biz/estimate/dto/EstimateResponse.java b/src/main/java/com/interplug/qcast/biz/estimate/dto/EstimateResponse.java index 8e15bcc0..f96ecaa8 100644 --- a/src/main/java/com/interplug/qcast/biz/estimate/dto/EstimateResponse.java +++ b/src/main/java/com/interplug/qcast/biz/estimate/dto/EstimateResponse.java @@ -37,6 +37,9 @@ public class EstimateResponse { @Schema(description = "가대 설치 ID") private String supportMethodId; + @Schema(description = "견적서 등록일") + private String drawingEstimateCreateDate; + @Schema(description = "모델") private String moduleModel; @@ -130,6 +133,9 @@ public class EstimateResponse { @Schema(description = "가격코드") private String priceCd; + @Schema(description = "갱신일") + private String lastEditDatetime; + // 가격 관련 정보 @Schema(description = "총 수량") private String totAmount; diff --git a/src/main/java/com/interplug/qcast/biz/estimate/dto/ItemRequest.java b/src/main/java/com/interplug/qcast/biz/estimate/dto/ItemRequest.java index 71f3ac1a..ad443f94 100644 --- a/src/main/java/com/interplug/qcast/biz/estimate/dto/ItemRequest.java +++ b/src/main/java/com/interplug/qcast/biz/estimate/dto/ItemRequest.java @@ -41,6 +41,9 @@ public class ItemRequest { @Schema(description = "추가구분코드") private String partAdd; + @Schema(description = "정가") + private String unitPrice; + @Schema(description = "단가") private String salePrice; diff --git a/src/main/java/com/interplug/qcast/biz/estimate/dto/NoteRequest.java b/src/main/java/com/interplug/qcast/biz/estimate/dto/NoteRequest.java new file mode 100644 index 00000000..a9617f42 --- /dev/null +++ b/src/main/java/com/interplug/qcast/biz/estimate/dto/NoteRequest.java @@ -0,0 +1,13 @@ +package com.interplug.qcast.biz.estimate.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class NoteRequest { + @Schema(description = "아이템번호 목록") + private String[] arrItemId; + + @Schema(description = "검색 - 특이사항 타입 코드") + private String schSpnTypeCd; +} diff --git a/src/main/java/com/interplug/qcast/biz/estimate/dto/NoteResponse.java b/src/main/java/com/interplug/qcast/biz/estimate/dto/NoteResponse.java new file mode 100644 index 00000000..5a752a38 --- /dev/null +++ b/src/main/java/com/interplug/qcast/biz/estimate/dto/NoteResponse.java @@ -0,0 +1,16 @@ +package com.interplug.qcast.biz.estimate.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class NoteResponse { + @Schema(description = "공통코드") + private String code; + + @Schema(description = "공통코드명") + private String codeNm; + + @Schema(description = "견적특이사항") + private String remarks; +} diff --git a/src/main/resources/mappers/estimate/estimateMapper.xml b/src/main/resources/mappers/estimate/estimateMapper.xml index 091c3d9f..faf76b52 100644 --- a/src/main/resources/mappers/estimate/estimateMapper.xml +++ b/src/main/resources/mappers/estimate/estimateMapper.xml @@ -16,6 +16,7 @@ , T.ROOF_MATERIAL_CLASS_ID , T.ROOF_MATERIAL_ID , T.SUPPORT_METHOD_ID + , T.DRAWING_ESTIMATE_CREATE_DATE , T.MODULE_MODEL , T.CHARGER , T.ESTIMATE_VALIDITY_TERM @@ -44,6 +45,7 @@ , T.FILE_FLG , T.ESTIMATE_OPTION , T.PKG_ASP + , T.LAST_EDIT_DATETIME , O.OBJECT_NAME , O.OBJECT_NAME_OMIT FROM T_PLAN T WITH (NOLOCK) @@ -101,6 +103,72 @@ + + + + + + /* sqlid : com.interplug.qcast.biz.estimate.updateObject */ + UPDATE T_OBJECT + SET + LAST_EDIT_DATETIME = GETDATE() + , LAST_EDIT_USER = #{userId} + + , OBJECT_NAME = #{objectName} + + + , STANDARD_WIND_SPEED_ID = #{standardWindSpeedId} + + + , VERTICAL_SNOW_COVER = #{snowfall} + + + , SURFACE_TYPE = #{surfaceType} + + + , INSTALL_HEIGHT = #{setupHeight} + + WHERE OBJECT_NO = #{objectNo} + + /* sqlid : com.interplug.qcast.biz.estimate.updateEstimate */ UPDATE T_PLAN @@ -126,7 +194,7 @@ , SUPPORT_MEAKER_MULTI = #{supportMeaker} , ESTIMATE_DATE = CONVERT(NVARCHAR(10), GETDATE(), 121) , FILE_FLG = '0' - , ESTIMATE_OPTION = NULL + , ESTIMATE_OPTION = #{estimateOption} , PKG_ASP = NULL , PRICE_CD = #{priceCd} @@ -168,6 +236,7 @@ , PART_ADD , LAST_EDIT_DATETIME , LAST_EDIT_USER + , UNIT_PRICE , SALE_PRICE , PKG_MATERIAL_FLG , ITEM_CHANGE_FLG @@ -187,6 +256,7 @@ , #{partAdd} , GETDATE() , #{userId} + , #{unitPrice} , #{salePrice} , #{pkgMaterialFlg} , #{itemChangeFlg}