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; }
-|
+
+
+
+ 三油商会
+ PITステーション名東一社
+ 様邸
+
+
+ 見積有効期限 :
+ 発行日より1ヶ月
+
+
+ 件名 :
+ 三油商会 PITステーション名東一社
+
+ |
+
+
+
+
+
+
+ 物件番号 :
+ RX524231020006
+
+
+ プラン :
+ 5
+
+
+ 日付 :
+ 2023/10/20
+
+
+ 登録番号 :
+ 3456789
+
+ 鈴与商事株式会社
+
+ 〒 420-0859
+ 静岡県静岡市葵区栄町 1-3 鈴与静岡ビル6F
+
+ TEL : 054-273-7780 FAX : 054-273-7704
+
|
+ |||||||
| No | +品名 | +型番 | +単価 | +数量 | +単位 | +価格 | +
|---|---|---|---|---|---|---|
| 1 | +Re.RISE 415 | +Re.RISE 415 | +¥278,050 | +20 | +枚 | +¥5,561,000 | +
| 2 | +Re.RISE 415 | +Re.RISE 415 | +¥278,050 | +20 | +枚 | +¥5,561,000 | +
| 小計 | +¥6,798,900 | +|||||
| 消費税 (10%) | +¥679,890 | +|||||
| 合計金額 | +¥7,478,790 | +|||||
| 備考 | +
|---|
|
+ ※受注発注品の納期はお問合せください。
+ ※別紙添付ファイルにて各拾い出し部材の注意事項・備考一覧をご確認ください
+ |
+
| 項目 | +文言 | +
|---|---|
| 물건번호 | ++ | 물건명 | ++ | ||
|---|---|---|---|---|---|
| 설치용량 | ++ | 인증용량 | ++ | 작성일 | ++ |
| 도도부현 | ++ | 일사량 관측지점 | ++ | ||
| 적설량 | ++ | 풍속조건 | ++ | ||
| 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㎜ + + ・設置可能地域であっても、錆やよごれ等による外観について保証するものではありません。 + ・垂直積雪量は特定行政庁の判断により更新される場合があります。設置される地域の特定行政庁への確認を必ず行って下さい。 ++
| 지붕명 | +지붕재종류 | +경사 | +시공레벨 | +시공방법 | +면조도구분 | +설치높이 | +
|---|---|---|---|---|---|---|