diff --git a/src/main/java/com/interplug/qcast/batch/JobLauncherController.java b/src/main/java/com/interplug/qcast/batch/JobLauncherController.java index a17f74ce..15b3e862 100644 --- a/src/main/java/com/interplug/qcast/batch/JobLauncherController.java +++ b/src/main/java/com/interplug/qcast/batch/JobLauncherController.java @@ -3,6 +3,7 @@ package com.interplug.qcast.batch; import java.util.Date; import java.util.HashMap; import java.util.Map; +import lombok.RequiredArgsConstructor; import org.springframework.batch.core.BatchStatus; import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.Job; @@ -19,7 +20,6 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; -import lombok.RequiredArgsConstructor; @RestController @RequiredArgsConstructor @@ -310,7 +310,7 @@ public class JobLauncherController { * @throws JobParametersInvalidException * @throws JobRestartException */ - @Scheduled(cron = "1 0 0 * * *") + @Scheduled(cron = "0 05 04 * * *") public String planConfirmJob() throws JobInstanceAlreadyCompleteException, JobExecutionAlreadyRunningException, JobParametersInvalidException, JobRestartException { @@ -339,7 +339,7 @@ public class JobLauncherController { * @throws JobParametersInvalidException * @throws JobRestartException */ - @Scheduled(cron = "1 20 0 * * *") + @Scheduled(cron = "0 20 04 * * *") public String estimateSyncJob() throws JobInstanceAlreadyCompleteException, JobExecutionAlreadyRunningException, JobParametersInvalidException, JobRestartException { 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 65fa6884..95e81f8a 100644 --- a/src/main/java/com/interplug/qcast/biz/estimate/EstimateController.java +++ b/src/main/java/com/interplug/qcast/biz/estimate/EstimateController.java @@ -79,7 +79,7 @@ public class EstimateController { return estimateService.updateEstimateReset(estimateRequest); } - @Operation(description = "견적서를 잠금여부를 저장한다.") + @Operation(description = "견적서 잠금여부를 저장한다.") @PostMapping("/save-estimate-lock") @ResponseStatus(HttpStatus.CREATED) public void updateEstimateLock(@RequestBody EstimateRequest estimateRequest) throws Exception { 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 57d0ed80..fc7acf1a 100644 --- a/src/main/java/com/interplug/qcast/biz/estimate/EstimateMapper.java +++ b/src/main/java/com/interplug/qcast/biz/estimate/EstimateMapper.java @@ -40,7 +40,7 @@ public interface EstimateMapper { public List selectEstimateRoofItemList(EstimateRequest estimateRequest); // 견적서 지붕재 PC 목록 조회 - public List selectEstimateRoofPcList(EstimateRequest estimateRequest); + public List selectEstimateCircuitItemList(EstimateRequest estimateRequest); // 견적서 지붕재 용량 목록 조회 public List selectEstimateRoofVolList(EstimateRequest estimateRequest); @@ -78,6 +78,9 @@ public interface EstimateMapper { // 견적서 지붕재 아이템 등록 public int insertEstimateRoofItem(ItemRequest itemRequest); + // 견적서 지붕재 회로구성 아이템 등록 + public int insertEstimateCircuitItem(ItemRequest itemRequest); + // 견적서 도면 아이템 등록 public int insertEstimateDrawingItem(ItemRequest itemRequest); @@ -93,6 +96,9 @@ public interface EstimateMapper { // 견적서 지붕재 아이템 목록 삭제(물리 삭제) public int deleteEstimateRoofItemList(EstimateRequest estimateRequest); + // 견적서 회로구성 아이템 목록 삭제(물리 삭제) + public int deleteEstimateCircuitItemList(EstimateRequest estimateRequest); + // 견적서 도면 아이템 목록 삭제(물리 삭제) public int deleteEstimateDrawingItemList(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 3a0a1ceb..ef343f3f 100644 --- a/src/main/java/com/interplug/qcast/biz/estimate/EstimateService.java +++ b/src/main/java/com/interplug/qcast/biz/estimate/EstimateService.java @@ -272,14 +272,10 @@ public class EstimateService { ErrorCode.INVALID_INPUT_VALUE, message.getMessage("common.message.required.data", "Sale Store ID")); } - if (StringUtils.isEmpty(estimateRequest.getSapSalesStoreCd())) { - throw new QcastException( - ErrorCode.INVALID_INPUT_VALUE, - message.getMessage("common.message.required.data", "Sap Sale Store Code")); - } String splitStr = "、"; List roofList = new ArrayList(); + List circuitItemList = estimateRequest.getCircuitItemList(); List itemList = estimateRequest.getItemList(); estimateRequest.setTempFlg("0"); @@ -582,9 +578,10 @@ public class EstimateService { // 도면 작성일 경우에만 지붕재, 도면 아이템 데이터 초기화 후 저장 if ("1".equals(estimateRequest.getDrawingFlg())) { - // 견적서 지붕면/아이템 제거 + // 견적서 지붕면/아이템 및 PC 회로구성도 제거 estimateMapper.deleteEstimateRoofList(estimateRequest); estimateMapper.deleteEstimateRoofItemList(estimateRequest); + estimateMapper.deleteEstimateCircuitItemList(estimateRequest); // 견적서 지붕면/아이템 신규 추가 for (RoofRequest roofRequest : roofList) { @@ -604,6 +601,16 @@ public class EstimateService { } } + // 견적서 회로구성 아이템 신규 추가 + for (ItemRequest circuitItemRequest : circuitItemList) { + circuitItemRequest.setObjectNo(estimateRequest.getObjectNo()); + circuitItemRequest.setPlanNo(estimateRequest.getPlanNo()); + circuitItemRequest.setItemId(circuitItemRequest.getItemId()); + circuitItemRequest.setCircuitCfg(circuitItemRequest.getCircuitCfg()); + + estimateMapper.insertEstimateCircuitItem(circuitItemRequest); + } + // 견적서 도면 아이템 제거 estimateMapper.deleteEstimateDrawingItemList(estimateRequest); // 견적서 도면 아이템 등록 @@ -806,6 +813,8 @@ public class EstimateService { // [6]. 견적서 지붕재 복사 List roofList = estimateMapper.selectEstimateRoofList(estimateRequest); List roofItemList = estimateMapper.selectEstimateRoofItemList(estimateRequest); + List circuitItemList = + estimateMapper.selectEstimateCircuitItemList(estimateRequest); for (RoofResponse roofResponse : roofList) { List roofItemList2 = new ArrayList(); @@ -848,6 +857,17 @@ public class EstimateService { } } + for (ItemResponse itemResponse : circuitItemList) { + ItemRequest circuitItemRequest = new ItemRequest(); + + circuitItemRequest.setObjectNo(estimateCopyRequest.getCopyObjectNo()); + circuitItemRequest.setPlanNo(estimateCopyRequest.getCopyPlanNo()); + circuitItemRequest.setItemId(itemResponse.getItemId()); + circuitItemRequest.setCircuitCfg(itemResponse.getCircuitCfg()); + + estimateMapper.insertEstimateCircuitItem(circuitItemRequest); + } + // [7]. 견적서 도면 복사 (추후 개발 필요) // [8]. QSP Q.CAST SEND API @@ -1273,7 +1293,8 @@ public class EstimateService { // 지붕재 목록 조회 RoofInfoResponse roofInfoResponse = new RoofInfoResponse(); List roofList = estimateMapper.selectEstimateRoofList(estimateRequest); - List roofPcList = estimateMapper.selectEstimateRoofPcList(estimateRequest); + List circuitItemList = + estimateMapper.selectEstimateCircuitItemList(estimateRequest); estimateRequest.setSchItemGroup("MODULE_"); List roofVolList = estimateMapper.selectEstimateRoofVolList(estimateRequest); @@ -1300,7 +1321,7 @@ public class EstimateService { roofInfoResponse.setModuleTotVolKw(String.valueOf(moduleTotVolKw)); roofInfoResponse.setRoofList(roofList); - roofInfoResponse.setRoofPcList(roofPcList); + roofInfoResponse.setCircuitItemList(circuitItemList); roofInfoResponse.setRoofVolList(roofVolList); // 인증용량 구하기 (지붕면마다 모듈과 PCS의 총 용량을 서로 비교해 낮은쪽 용량으로 합산) @@ -1885,17 +1906,17 @@ public class EstimateService { elm = doc.getElementById("notStandItemList_detail"); elm.append(sb.toString()); - if (data.getRoofInfo().getRoofPcList() != null) { + if (data.getRoofInfo().getCircuitItemList() != null) { no = 1; sb = new StringBuilder(); - for (RoofResponse roofResponse : data.getRoofInfo().getRoofPcList()) { + for (ItemResponse itemResponse : data.getRoofInfo().getCircuitItemList()) { sb.append(""); sb.append("" + (no++) + ""); sb.append( "" - + StringUtils.defaultString(roofResponse.getItemNo()) - + "[" - + roofResponse.getPcModuleAmount() + + StringUtils.defaultString(itemResponse.getItemNo()) + + " [" + + itemResponse.getCircuitCfg() + "]" + ""); sb.append(""); 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 76a74134..c384a1b2 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 @@ -195,6 +195,9 @@ public class EstimateRequest { @Schema(description = "지붕재 목록") List roofList; + @Schema(description = "지붕재 목록") + List circuitItemList; + @Schema(description = "아이템 목록") List itemList; 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 55dd700f..44c948e1 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 @@ -14,6 +14,9 @@ public class ItemRequest { @Schema(description = "플랜번호") private String planNo; + @Schema(description = "지붕재 아이템 번호") + private String roofItemNo; + @Schema(description = "지붕재 번호") private String roofNo; @@ -74,8 +77,11 @@ public class ItemRequest { @Schema(description = "PC 아이템 ID") private String pcItemId; - @Schema(description = "회로") - private String circuit; + @Schema(description = "회로번호") + private String circuitNo; + + @Schema(description = "회로구성도") + private String circuitCfg; @Schema(description = "W") private String pnowW; diff --git a/src/main/java/com/interplug/qcast/biz/estimate/dto/ItemResponse.java b/src/main/java/com/interplug/qcast/biz/estimate/dto/ItemResponse.java index 7244fb32..9b4d95e3 100644 --- a/src/main/java/com/interplug/qcast/biz/estimate/dto/ItemResponse.java +++ b/src/main/java/com/interplug/qcast/biz/estimate/dto/ItemResponse.java @@ -79,4 +79,7 @@ public class ItemResponse { @Schema(description = "모듈여부") private String moduleFlg; + + @Schema(description = "회로구성도") + private String circuitCfg; } diff --git a/src/main/java/com/interplug/qcast/biz/estimate/dto/RoofInfoResponse.java b/src/main/java/com/interplug/qcast/biz/estimate/dto/RoofInfoResponse.java index 4c035da5..6e12bb64 100644 --- a/src/main/java/com/interplug/qcast/biz/estimate/dto/RoofInfoResponse.java +++ b/src/main/java/com/interplug/qcast/biz/estimate/dto/RoofInfoResponse.java @@ -21,8 +21,8 @@ public class RoofInfoResponse { @Schema(description = "지붕면 목록") private List roofList; - @Schema(description = "지붕면 파워컨디셔너 목록") - private List roofPcList; + @Schema(description = "파워컨디셔너 목록") + private List circuitItemList; @Schema(description = "지붕면 용량 목록") private List roofVolList; diff --git a/src/main/java/com/interplug/qcast/biz/estimate/dto/RoofResponse.java b/src/main/java/com/interplug/qcast/biz/estimate/dto/RoofResponse.java index 927a570a..4337db13 100644 --- a/src/main/java/com/interplug/qcast/biz/estimate/dto/RoofResponse.java +++ b/src/main/java/com/interplug/qcast/biz/estimate/dto/RoofResponse.java @@ -91,10 +91,4 @@ public class RoofResponse { @Schema(description = "PC 아이템 ID") private String pcItemId; - - @Schema(description = "회로") - private String circuit; - - @Schema(description = "Pc 모듈 매수") - private String pcModuleAmount; } diff --git a/src/main/resources/mappers/estimate/estimateMapper.xml b/src/main/resources/mappers/estimate/estimateMapper.xml index 6a9dc141..aa26bcbe 100644 --- a/src/main/resources/mappers/estimate/estimateMapper.xml +++ b/src/main/resources/mappers/estimate/estimateMapper.xml @@ -327,7 +327,7 @@ , ISNULL(( SELECT SUM((AMOUNT * CAST(ISNULL(SPECIFICATION, 0) AS FLOAT) / 1000)) - FROM T_ROOF_ITEM_ESTIMATE (NOLOCK) + FROM T_PART_ROOF_ITEM_ESTIMATE (NOLOCK) WHERE OBJECT_NO = PE.OBJECT_NO AND PLAN_NO = PE.PLAN_NO AND PC_ITEM_ID = PE.ITEM_ID @@ -364,7 +364,7 @@ , ISNULL(C2.CODE_NM, '') AS SUPPORT_METHOD_NAME , ISNULL(C3.CODE_NM, '') AS CONSTRUCT_SPECIFICATION_NAME FROM T_PLAN P WITH (NOLOCK) - INNER JOIN T_ROOF_ESTIMATE RE WITH (NOLOCK) + INNER JOIN T_PART_ROOF_ESTIMATE RE WITH (NOLOCK) ON P.OBJECT_NO = RE.OBJECT_NO AND P.PLAN_NO = RE.PLAN_NO LEFT OUTER JOIN M_COMM_L C1 WITH (NOLOCK) @@ -392,48 +392,26 @@ , ISNULL(PIE.SPECIFICATION, '') AS SPECIFICATION , PIE.AMOUNT , PIE.PC_ITEM_ID - FROM T_ROOF_ITEM_ESTIMATE PIE WITH (NOLOCK) + FROM T_PART_ROOF_ITEM_ESTIMATE PIE WITH (NOLOCK) WHERE PIE.OBJECT_NO = #{objectNo} AND PIE.PLAN_NO = #{planNo} ORDER BY PIE.ROOF_NO - + /* sqlid : com.interplug.qcast.biz.estimate.selectEstimateCircuitItemList */ SELECT - T.ITEM_ID - , T.ITEM_NO - , SUM(T.AMOUNT) AS AMOUNT - , SUM(T.PC_AMOUNT) AS PC_MODULE_AMOUNT - FROM - ( - SELECT - P.OBJECT_NO - , P.PLAN_NO - , RE.ROOF_NO - , RE.ROOF_SURFACE - , ROUND(CAST(RE.SLOPE AS FLOAT), 2) AS SLOPE - , RIE.AMOUNT - , CAST(RIE.SPECIFICATION AS FLOAT) SPECIFICATION - , I.ITEM_ID - , I.ITEM_NO - , I.ITEM_GROUP - , (SELECT SUM(AMOUNT) FROM T_ROOF_ITEM_ESTIMATE WHERE ROOF_NO = RIE.ROOF_NO AND OBJECT_NO = RIE.OBJECT_NO AND PLAN_NO = RIE.PLAN_NO AND PC_ITEM_ID = RIE.ITEM_ID) AS PC_AMOUNT - FROM T_PLAN P WITH (NOLOCK) - INNER JOIN T_ROOF_ESTIMATE RE WITH (NOLOCK) - ON P.OBJECT_NO = RE.OBJECT_NO - AND P.PLAN_NO = RE.PLAN_NO - INNER JOIN T_ROOF_ITEM_ESTIMATE RIE WITH (NOLOCK) - ON RE.ROOF_NO = RIE.ROOF_NO - AND RE.OBJECT_NO = RE.OBJECT_NO - AND RE.PLAN_NO = RE.PLAN_NO - INNER JOIN M_ITEM I WITH (NOLOCK) - ON RIE.ITEM_ID = I.ITEM_ID - WHERE P.OBJECT_NO = #{objectNo} - AND P.PLAN_NO = #{planNo} - AND I.ITEM_GROUP = 'PC_' - ) T - GROUP BY T.ITEM_ID, T.ITEM_NO + PE.ITEM_ID + , PE.ITEM_NO + , PE.ITEM_NAME + , PCIE.CIRCUIT_CFG + FROM T_PART_ESTIMATE PE WITH (NOLOCK) + INNER JOIN T_PART_CIRCUIT_ITEM_ESTIMATE PCIE WITH (NOLOCK) + ON PE.OBJECT_NO = PCIE.OBJECT_NO + AND PE.PLAN_NO = PCIE.PLAN_NO + AND PE.ITEM_ID = PCIE.ITEM_ID + WHERE PE.OBJECT_NO = #{objectNo} + AND PE.PLAN_NO = #{planNo} @@ -85,8 +85,8 @@ , A.CLASS_TYPE , A.AZIMUTH , (CASE WHEN A.CLASS_TYPE = 0 THEN A.SLOPE ELSE A.ANGLE END) AS SLOPE_ANGLE - FROM T_ROOF_ESTIMATE A WITH (NOLOCK) - INNER JOIN T_ROOF_ITEM_ESTIMATE B WITH (NOLOCK) + FROM T_PART_ROOF_ESTIMATE A WITH (NOLOCK) + INNER JOIN T_PART_ROOF_ITEM_ESTIMATE B WITH (NOLOCK) ON A.OBJECT_NO = B.OBJECT_NO AND A.PLAN_NO = B.PLAN_NO AND A.ROOF_NO = B.ROOF_NO diff --git a/src/main/resources/template/excel/excel_download_quotation_detail_template.xlsx b/src/main/resources/template/excel/excel_download_quotation_detail_template.xlsx index e3f70187..0ae1185b 100644 Binary files a/src/main/resources/template/excel/excel_download_quotation_detail_template.xlsx and b/src/main/resources/template/excel/excel_download_quotation_detail_template.xlsx differ