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 f5ac681f..c2a7902d 100644 --- a/src/main/java/com/interplug/qcast/biz/estimate/EstimateService.java +++ b/src/main/java/com/interplug/qcast/biz/estimate/EstimateService.java @@ -794,7 +794,7 @@ public class EstimateService { estimateResponse.setPwrGnrSim(pwrGnrSimResponse); if (true) { // PDF 다운로드 - String[] arrSection = new String[3]; // TODO Section 갯수 넣기 + String[] arrSection = new String[5]; // TODO Section 갯수 넣기 int iSection = 0; String pdfFileName = @@ -807,6 +807,15 @@ public class EstimateService { // 삭제하려는 element Element elm; + arrSection[iSection] = "div.section1"; + iSection++; + arrSection[iSection] = "div.section2"; + iSection++; + arrSection[iSection] = "div.section4"; + iSection++; + arrSection[iSection] = "div.section5"; + iSection++; + // 발전시뮬레이션 pdf Html 생성 if (true) { arrSection[iSection] = "div.section3"; diff --git a/src/main/java/com/interplug/qcast/biz/pwrGnrSimulation/PwrGnrSimService.java b/src/main/java/com/interplug/qcast/biz/pwrGnrSimulation/PwrGnrSimService.java index 7c4af5a5..0f34ea41 100644 --- a/src/main/java/com/interplug/qcast/biz/pwrGnrSimulation/PwrGnrSimService.java +++ b/src/main/java/com/interplug/qcast/biz/pwrGnrSimulation/PwrGnrSimService.java @@ -164,9 +164,12 @@ public class PwrGnrSimService { if (k == 0) { pwrGnrSimReq.setPcs1(p.getItemId()); pwrGnrSimReq.setPcsInput1(Integer.parseInt(p.getAmount())); - } else { + } else if (k == 1) { pwrGnrSimReq.setPcs2(p.getItemId()); pwrGnrSimReq.setPcsInput2(Integer.parseInt(p.getAmount())); + } else { + pwrGnrSimReq.setPcs3(p.getItemId()); + pwrGnrSimReq.setPcsInput3(Integer.parseInt(p.getAmount())); } } // module 정보 @@ -280,6 +283,10 @@ public class PwrGnrSimService { double pcs2_henkankouritsu = 1; double pcs2_youryou = 0; + // PCS3 선택 정보 + double pcs3_henkankouritsu = 1; + double pcs3_youryou = 0; + for (int i = 0; i < pcs_data.length; i++) { // pcs1 변환 효율과 용량, 대전류 대응, 허용 적재율 가져오기 if (pwrGnrSimReq.getPcs1().equals(pcs_data[i][0])) { pcs1_henkankouritsu = Double.parseDouble(pcs_data[i][3]) / 100; @@ -301,13 +308,26 @@ public class PwrGnrSimService { } } - // pcs1과 pcs2의 실효 변환 효율 중 낮은 값을 사용 - double pcs_henkankouritsu = Math.min(pcs1_henkankouritsu, pcs2_henkankouritsu); + for (int i = 0; i < pcs_data.length; i++) { // pcs3 변환 효율과 용량 가져오기 + if (pwrGnrSimReq.getPcs3() != null && pwrGnrSimReq.getPcs3().equals(pcs_data[i][0])) { + pcs3_henkankouritsu = Double.parseDouble(pcs_data[i][3]) / 100; + pcs3_youryou = Double.parseDouble(pcs_data[i][4]); + break; + } else { + pcs3_henkankouritsu = 1; + pcs3_youryou = 0; + } + } + + // pcs1과 pcs2, pcs3의 실효 변환 효율 중 낮은 값을 사용 + double pcs_henkankouritsu = + Math.min(pcs1_henkankouritsu, Math.min(pcs3_henkankouritsu, pcs2_henkankouritsu)); // pcs 총 용량 계산 double pcs_youryou_total = (pcs1_youryou * Double.valueOf(pwrGnrSimReq.getPcsInput1())) - + (pcs2_youryou * Double.valueOf(pwrGnrSimReq.getPcsInput2())); + + (pcs2_youryou * Double.valueOf(pwrGnrSimReq.getPcsInput2())) + + (pcs3_youryou * Double.valueOf(pwrGnrSimReq.getPcsInput3())); double module1_watt = 0, module1_watt_flash = 0 /*, module1_amp = 0*/; double module2_watt = 0, module2_watt_flash = 0; diff --git a/src/main/java/com/interplug/qcast/biz/pwrGnrSimulation/dto/PwrGnrSimRequest.java b/src/main/java/com/interplug/qcast/biz/pwrGnrSimulation/dto/PwrGnrSimRequest.java index 5ff01926..cb22305d 100644 --- a/src/main/java/com/interplug/qcast/biz/pwrGnrSimulation/dto/PwrGnrSimRequest.java +++ b/src/main/java/com/interplug/qcast/biz/pwrGnrSimulation/dto/PwrGnrSimRequest.java @@ -56,4 +56,10 @@ public class PwrGnrSimRequest { @Schema(description = "PCS2 대") private int pcsInput2; + + @Schema(description = "PCS 3") + private String pcs3; + + @Schema(description = "PCS3 대") + private int pcsInput3; } diff --git a/src/main/resources/template/pdf/pdf_download_quotation_detail_template.html b/src/main/resources/template/pdf/pdf_download_quotation_detail_template.html index d3210f56..11161be5 100644 --- a/src/main/resources/template/pdf/pdf_download_quotation_detail_template.html +++ b/src/main/resources/template/pdf/pdf_download_quotation_detail_template.html @@ -16,94 +16,104 @@ border-collapse: collapse; margin: 0 auto; line-height: 150%; - color: #333; + color: #333 } th, td { padding: 5px 5px 3px; text-align: center; font-size: 12px; - border: 1px solid #000; + border: 1px solid #000 } th { background-color: #eee; - font-weight: bold; + font-weight: bold } td { - background-color: white; + background-color: white } .col-20 { - width: 20%; + width: 20% } .col-15 { - width: 15%; + width: 15% } body { max-width: 740px; - margin: 0 auto; + margin: 0 auto } .mb20 { - margin-bottom: 20px; /* 아래쪽 간격 */ + margin-bottom: 20px } + .al-l { + text-align: left !important + } + + .al-r { + text-align: right !important + } + + /* 가이드박스 */ .guide-box { border: 1px solid #000; padding: 15px; - margin: 10px 0; + margin: 10px 0 } .guide-content { + white-space: pre-line; line-height: 1.4; - font-size: 14px; + font-size: 14px } - /* 차트 설정 */ + /* 차트퍼블 */ .chart-wrapper { width: 100%; table-layout: fixed; margin: 30px 0; - height: 324.3px; + height: 324.3px } .chart-wrapper td { padding: 0; - border: none; + border: none } .chart-wrapper td.y-axis-wrap { - vertical-align: bottom; + vertical-align: bottom } .y-axis { - margin-top: -5px; + margin-top: -5px } .y-axis td { font-size: 12px; line-height: 1; vertical-align: bottom; - padding: 12.3px 0; + padding: 12.3px 0 } .y-axis td.zero { - padding-bottom: 0; + padding-bottom: 0 } .y-axis td.top { - padding-top: 0; + padding-top: 0 } .chart-wrapper td.bar-cell { position: relative; vertical-align: bottom; border-bottom: 1px solid #ddd; - background-color: transparent; + background-color: transparent } .chart-wrapper td.bar-cell .bar { @@ -111,31 +121,380 @@ bottom: 0; left: 13.4px; width: 30px; - margin: 0 auto; + margin: 0 auto } .chart-wrapper td.month-cell { font-size: 12px; - padding-top: 7px; - } - - .chart-line { + padding-top: 7px } .chart-line td { background-color: transparent; padding: 18.2px 0; - border-bottom: 1px solid #ddd !important; + border-bottom: 1px solid #ddd !important } .chart-line td.top { - padding: 1px; + padding: 1px + } + + /* 타이틀 */ + .title { + text-align: center; + font-size: 40px; + letter-spacing: 10px; + font-weight: bold; + margin: 10px 0 30px; + border-top: 1px solid #000; + border-bottom: 1px solid #000; + } + + /* 비고퍼블 */ + .note th, .note td { + padding: 10px + } + + /* 총액퍼블 */ + .all-price-wrap { + text-align: center; + margin-bottom: 50px; + } + + .all-price { + display: inline-block; + text-align: center; + border-bottom: 1px solid #000; + } + + .all-price span { + display: inline-block; + font-size: 18px; + font-weight: bold; + } + + .all-price-value { + width: 300px; + display: inline-block; + text-align: right; + } + + /* 태양전지 */ + .sun-volt { + display: inline-block; + margin-bottom: 30px; + border-bottom: 1px solid #000; + } + + .sun-volt span { + display: inline-block; + font-size: 15px; + font-weight: bold; + } + + .sun-volt-value { + width: 130px; + display: inline-block; + text-align: right; + font-size: 15px; + } + + .price-table td.end { + background-color: #eee; + font-weight: bold; + } + + .product-info-wrap { + table-layout: fixed; + margin-bottom: 25px; + } + + .product-info-wrap td { + border: none; + padding: 0; + text-align: left; + vertical-align: top; + } + + /* 견적서 정의 */ + .estimate-wrap { + display: inline-block; + vertical-align: top; + } + + .estimate-info { + display: inline-block; + margin-bottom: 40px; + border-bottom: 1px solid #000; + } + + .estimate-info span { + font-size: 13px; + font-weight: bold; + } + + .estimate-info-name { + padding-right: 20px; + } + + /* tit-form */ + .estimate-tit-form { + display: block; + margin-bottom: 30px; + } + + .estimate-tit-form span { + font-size: 13px; + border-bottom: 1px solid #000; + } + + .estimate-tit-form .estimate-tit { + display: inline-block; + width: 82px; + font-size: 12px; + font-weight: bold; + border: none; + text-align: right; + } + + /* 물품 */ + .product-wrap > div { + margin-bottom: 10px; + } + + .product-num { + display: inline-block; + margin-right: 20px; + } + + .product-count { + display: inline-block;; + } + + .product-count .tit, .product-num .tit { + display: inline-block; + font-size: 12px; + font-weight: bold; + } + + .product-count span, .product-num span { + display: inline-block; + font-size: 13px; + } + + .product-form { + display: block; + } + + .product-form .tit { + display: inline-block; + width: 62px; + font-size: 12px; + font-weight: bold; + border: none; + text-align: right; + } + + .product-form span { + display: inline-block; + font-size: 13px; + } + + .store-info-tit { + font-size: 13px; + font-weight: bold; + display: block; + margin-bottom: 10px; + } + + .product-info-wrap .store-info { + display: block; + margin-bottom: 25px; + } + + .store-info span { + display: block; + font-size: 12px; + margin-bottom: 0px; + } + + .store-info .number { + display: block; + font-size: 13px; + } + + .store-info .number span { + display: inline-block; + } + + .approval-table { + width: 200px; + margin: 0 0 0 auto; + } + + .approval-table th { + background-color: transparent; + } + + .approval-table td { + padding: 30px 0; + border: 1px solid #000; } -
1111111111
-
222222222
+
+

御 見 積 書

+ + + + + + + + +
+
+
+ 三油商会 +  PITステーション名東一社 + 様邸 +
+
+ 見積有効期限 : + 発行日より1ヶ月 +
+
+ 件名 : + 三油商会 PITステーション名東一社 +
+
+
+
+
+
+ 物件番号 : + RX524231020006 +
+
+ プラン : + 5 +
+
+
+ 日付 : + 2023/10/20 +
+
+ 登録番号 : + 3456789 +
+
鈴与商事株式会社
+
+ 〒 420-0859 + 静岡県静岡市葵区栄町 1-3 鈴与静岡ビル6F +
TEL : 054-273-7780 FAX : 054-273-7704
+
+ + + + + + + + + + + + + +
承認担当
+
+
+
+ 太陽電池容量 : + 8.3 + KW +
+
+
+ お見積金額 + 7,478,790 円 + (消費税込) +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
No品名型番単価数量単位価格
1Re.RISE 415Re.RISE 415¥278,05020¥5,561,000
2Re.RISE 415Re.RISE 415¥278,05020¥5,561,000
小計¥6,798,900
消費税 (10%)¥679,890
合計金額¥7,478,790
+ + + + + + + + + + + +
備考
+
※受注発注品の納期はお問合せください。
+
※別紙添付ファイルにて各拾い出し部材の注意事項・備考一覧をご確認ください
+
+
+
+ + + + + + + + +
項目文言
+
@@ -251,5 +610,202 @@
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
물건번호물건명
설치용량인증용량작성일
도도부현일사량 관측지점
적설량풍속조건
+ +
+
+ 이미지영역 +
+
+ + + + + + + + + + + + + +
No부재명(형번)매수
+ + + + + + + + + + + + +
No파워컨디셔너
+ + + + + + + + + + + + + + +
지붕면경사각설치매수용량(kW)
+ +
+
+            ■注意事項
+             ・本図面は見積作成の為、太陽電池モジュールの配列及び枚数、架台のレールの種類数量、
+              および、支持点数を示すものであり、実際の施工においては、現地調査で支持点の位置を確認し、
+              施工マニュアルに従って施工して下さい。
+
+             ・各屋根材の動き流れ寸法は下記と仮定して作図しております。
+              実際の寸法を確認のうえ、施工マニュアルに従った施工を行って下さい。
+              和瓦53A:235㎜、和瓦53B:225㎜、平板瓦(C、D型):280㎜、S瓦:260㎜、セメント瓦:345㎜、スレート:182㎜
+              アスファルトシングル:143㎜、金属横葺:182㎜
+
+            ・設置可能地域であっても、錆やよごれ等による外観について保証するものではありません。
+            ・垂直積雪量は特定行政庁の判断により更新される場合があります。設置される地域の特定行政庁への確認を必ず行って下さい。
+        
+
+ + + + + + + + + + + + + + +
지붕명지붕재종류경사시공레벨
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
물건번호물건명
설치용량인증용량작성일
도도부현일사량 관측지점
적설량풍속조건
+ +
+
+ 이미지영역 +
+
+ + + + + + + + + + +
No부재명(형변)매수
+ +
+
+            ■注意事項
+             ・本図面は見積作成の為、太陽電池モジュールの配列及び枚数、架台のレールの種類数量、
+              および、支持点数を示すものであり、実際の施工においては、現地調査で支持点の位置を確認し、
+              施工マニュアルに従って施工して下さい。
+
+             ・各屋根材の動き流れ寸法は下記と仮定して作図しております。
+              実際の寸法を確認のうえ、施工マニュアルに従った施工を行って下さい。
+              和瓦53A:235㎜、和瓦53B:225㎜、平板瓦(C、D型):280㎜、S瓦:260㎜、セメント瓦:345㎜、スレート:182㎜
+              アスファルトシングル:143㎜、金属横葺:182㎜
+
+            ・設置可能地域であっても、錆やよごれ等による外観について保証するものではありません。
+            ・垂直積雪量は特定行政庁の判断により更新される場合があります。設置される地域の特定行政庁への確認を必ず行って下さい。
+        
+
+ + + + + + + + + + + + + + + + + +
지붕명지붕재종류경사시공레벨시공방법면조도구분설치높이
+ +
\ No newline at end of file