발전시뮬레이션 pcs3 추가 , pdf 다운로드 html 수정

This commit is contained in:
DESKTOP-6ARNG1Q\dlsgk 2024-11-14 17:18:11 +09:00
parent f4d4760385
commit 1702e44a12
4 changed files with 624 additions and 33 deletions

View File

@ -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";

View File

@ -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;

View File

@ -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;
}

View File

@ -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;
}
</style>
</head>
<body>
<div class="section1">1111111111</div>
<div class="section2">222222222</div>
<div class="section1 ">
<h1 class="title">御 見 積 書</h1>
<table class="product-info-wrap">
<tbody>
<tr>
<td colspan="3">
<div class="estimate-wrap">
<div class="estimate-info">
<span>三油商会</span>
<span class="estimate-info-name"> PITステーション名東一社</span>
<span>様邸 </span>
</div>
<div class="estimate-tit-form">
<span class="estimate-tit">見積有効期限 :</span>
<span>発行日より1ヶ月</span>
</div>
<div class="estimate-tit-form">
<span class="estimate-tit">件名 :</span>
<span>三油商会 PITステーション名東一社</span>
</div>
</div>
</td>
<td colspan="2">
<div class="product-wrap">
<div>
<div class="product-num">
<span class="tit">物件番号 :</span>
<span>RX524231020006</span>
</div>
<div class="product-count">
<span class="tit">プラン :</span>
<span>5</span>
</div>
</div>
<div class="product-form">
<span class="tit">日付 :</span>
<span>2023/10/20</span>
</div>
<div class="product-form">
<span class="tit">登録番号 :</span>
<span>3456789</span>
</div>
<div class="store-info-tit">鈴与商事株式会社</div>
<div class="store-info">
<span>〒 420-0859</span>
<span>静岡県静岡市葵区栄町 1- 鈴与静岡ビルF</span>
<div class="number"><span>TEL :</span> <span>054-273-7780</span> <span>FAX :</span> <span>054-273-7704</span></span></div>
</div>
<table class="approval-table">
<thead>
<tr>
<th>承認</th>
<th>担当</th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
</tbody>
</table>
<div class="sun-volt">
<span>太陽電池容量 :</span>
<span class="sun-volt-value">8.3</span>
<span>KW</span>
</div>
<div class="all-price-wrap">
<div class="all-price ">
<span>お見積金額</span>
<span class="all-price-value">7,478,790 円 </span>
<span>(消費税込)</span>
</div>
</div>
<table class="price-table mb20">
<thead>
<tr>
<th style="width: 60px;">No</th>
<th>品名</th>
<th style="width: 80px;">型番</th>
<th style="width: 80px;">単価</th>
<th style="width: 60px;">数量</th>
<th style="width: 80px;">単位</th>
<th style="width: 110px;">価格</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Re.RISE 415</td>
<td>Re.RISE 415</td>
<td>¥278,050</td>
<td>20</td>
<td></td>
<td class="al-r">¥5,561,000</td>
</tr>
<tr>
<td>2</td>
<td>Re.RISE 415</td>
<td>Re.RISE 415</td>
<td>¥278,050</td>
<td>20</td>
<td></td>
<td class="al-r">¥5,561,000</td>
</tr>
<tr>
<td class="al-r" colspan="6">小計</td>
<td class="al-r">¥6,798,900</td>
</tr>
<tr>
<td class="al-r" colspan="6">消費税 (10%)</td>
<td class="al-r">¥679,890</td>
</tr>
<tr>
<td class="al-r end" colspan="6">合計金額</td>
<td class="al-r end">¥7,478,790</td>
</tr>
</tbody>
</table>
<table class="note mb20">
<thead>
<tr>
<th class="al-l">備考</th>
</tr>
</thead>
<tbody>
<tr>
<td class="al-l">
<div>※受注発注品の納期はお問合せください。</div>
<div>※別紙添付ファイルにて各拾い出し部材の注意事項・備考一覧をご確認ください</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="section2">
<table class="mb20">
<tbody>
<tr>
<th class="col-15">項目</th>
<th class="col-15">文言</th>
</tr>
<tr id="noteList_detail"></tr>
</tbody>
</table>
</div>
<div class="section3">
<table class="mb20">
<tbody>
@ -251,5 +610,202 @@
<div class="guide-content" id="guideInfo"></div>
</div>
</div>
<div class="section4">
<table class="mb20">
<tbody>
<tr>
<th class="col-15">물건번호</th>
<td id="objectNo4" colspan="3"></td>
<th class="col-15">물건명</th>
<td id="objectName"></td>
</tr>
<tr>
<th class="col-15">설치용량</th>
<td class="col-12" id="totVolKw"></td>
<th class="col-15">인증용량</th>
<td class="col-12" id="certVolKw"></td>
<th class="col-15">작성일</th>
<td id="drawingEstimateCreateDate4"></td>
</tr>
<tr>
<th class="col-15">도도부현</th>
<td id="prefName4" colspan="3"></td>
<th class="col-15">일사량 관측지점</th>
<td id="areaName4"></td>
</tr>
<tr>
<th class="col-15">적설량</th>
<td id="snowfall4" colspan="3"></td>
<th class="col-15">풍속조건</th>
<td id="standardWindSpeedName4"></td>
</tr>
</tbody>
</table>
<div class="guide-box">
<div class="guide-content">
이미지영역
</div>
</div>
<table class="mb20">
<thead>
<tr>
<th class="col-15">No</th>
<th>부재명(형번)</th>
<th class="col-15">매수</th>
</tr>
</thead>
<tbody>
<tr id="notStandItemList_detail">
</tr>
</tbody>
</table>
<table class="mb20">
<thead>
<tr>
<th class="col-15">No</th>
<th>파워컨디셔너</th>
</tr>
</thead>
<tbody>
<tr id="pcsItemList_detail">
</tr>
</tbody>
</table>
<table class="mb20">
<thead>
<tr>
<th class="col-15">지붕면</th>
<th>경사각</th>
<th>설치매수</th>
<th>용량(kW)</th>
</tr>
</thead>
<tbody>
<tr id="surFaceList_detail">
</tr>
</tbody>
</table>
<div class="guide-box">
<pre class="guide-content">
■注意事項
 ・本図面は見積作成の為、太陽電池モジュールの配列及び枚数、架台のレールの種類数量、
  および、支持点数を示すものであり、実際の施工においては、現地調査で支持点の位置を確認し、
  施工マニュアルに従って施工して下さい。
 ・各屋根材の動き流れ寸法は下記と仮定して作図しております。
  実際の寸法を確認のうえ、施工マニュアルに従った施工を行って下さい。
  和瓦53A235㎜、和瓦53B225㎜、平板瓦C、D型:280㎜、S瓦260㎜、セメント瓦345㎜、スレート182㎜
  アスファルトシングル143㎜、金属横葺182㎜
・設置可能地域であっても、錆やよごれ等による外観について保証するものではありません。
・垂直積雪量は特定行政庁の判断により更新される場合があります。設置される地域の特定行政庁への確認を必ず行って下さい。
</pre>
</div>
<table class="mb20">
<thead>
<tr>
<th class="col-15">지붕명</th>
<th class="col-15">지붕재종류</th>
<th class="col-15">경사</th>
<th class="col-15">시공레벨</th>
</tr>
</thead>
<tbody>
<tr id="surFaceList_detail2">
</tr>
</tbody>
</table>
</div>
<div class="section5">
<table class="mb20">
<tbody>
<tr>
<th class="col-15">물건번호</th>
<td id="objectNo5" colspan="3"></td>
<th class="col-15">물건명</th>
<td id="objectName5"></td>
</tr>
<tr>
<th class="col-15">설치용량</th>
<td class="col-12" id="totVolKw5"></td>
<th class="col-15">인증용량</th>
<td class="col-12" id="certVolKw5"></td>
<th class="col-15">작성일</th>
<td id="drawingEstimateCreateDate5"></td>
</tr>
<tr>
<th class="col-15">도도부현</th>
<td id="prefName5" colspan="3"></td>
<th class="col-15">일사량 관측지점</th>
<td id="areaName5"></td>
</tr>
<tr>
<th class="col-15">적설량</th>
<td id="snowfall5" colspan="3"></td>
<th class="col-15">풍속조건</th>
<td id="standardWindSpeedName5"></td>
</tr>
</tbody>
</table>
<div class="guide-box">
<div class="guide-content">
이미지영역
</div>
</div>
<table class="mb20">
<tbody>
<tr>
<th class="col-15">No</th>
<th class="col-15">부재명(형변)</th>
<th class="col-15">매수</th>
</tr>
<tr id="standItemList_detail"></tr>
</tbody>
</table>
<div class="guide-box">
<pre class="guide-content">
■注意事項
 ・本図面は見積作成の為、太陽電池モジュールの配列及び枚数、架台のレールの種類数量、
  および、支持点数を示すものであり、実際の施工においては、現地調査で支持点の位置を確認し、
  施工マニュアルに従って施工して下さい。
 ・各屋根材の動き流れ寸法は下記と仮定して作図しております。
  実際の寸法を確認のうえ、施工マニュアルに従った施工を行って下さい。
  和瓦53A235㎜、和瓦53B225㎜、平板瓦C、D型:280㎜、S瓦260㎜、セメント瓦345㎜、スレート182㎜
  アスファルトシングル143㎜、金属横葺182㎜
・設置可能地域であっても、錆やよごれ等による外観について保証するものではありません。
・垂直積雪量は特定行政庁の判断により更新される場合があります。設置される地域の特定行政庁への確認を必ず行って下さい。
</pre>
</div>
<table class="mb20">
<thead>
<tr>
<th class="col-15">지붕명</th>
<th class="col-15">지붕재종류</th>
<th class="col-15">경사</th>
<th class="col-15">시공레벨</th>
<th class="col-15">시공방법</th>
<th class="col-15">면조도구분</th>
<th class="col-15">설치높이</th>
</tr>
</thead>
<tbody>
<tr id="roofList_detail">
</tr>
</tbody>
</table>
</div>
</body>
</html>