planList;
diff --git a/src/main/java/com/interplug/qcast/biz/object/dto/PlanReqRequest.java b/src/main/java/com/interplug/qcast/biz/object/dto/PlanReqRequest.java
index a1aa3cd6..7898141c 100644
--- a/src/main/java/com/interplug/qcast/biz/object/dto/PlanReqRequest.java
+++ b/src/main/java/com/interplug/qcast/biz/object/dto/PlanReqRequest.java
@@ -17,6 +17,9 @@ public class PlanReqRequest {
@Schema(description = "물건번호")
private String objectNo;
+ @Schema(description = "삭제여부")
+ private String delFlg;
+
@Schema(description = "검색 - 설계의뢰번호")
private String schPlanReqNo;
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 7a2d1be5..7c4af5a5 100644
--- a/src/main/java/com/interplug/qcast/biz/pwrGnrSimulation/PwrGnrSimService.java
+++ b/src/main/java/com/interplug/qcast/biz/pwrGnrSimulation/PwrGnrSimService.java
@@ -7,19 +7,24 @@ import com.interplug.qcast.config.Exception.ErrorCode;
import com.interplug.qcast.config.Exception.QcastException;
import com.interplug.qcast.config.message.Messages;
import com.interplug.qcast.util.InterfaceQsp;
+import java.awt.*;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
@Slf4j
@Service
@@ -1303,4 +1308,180 @@ public class PwrGnrSimService {
return guideResponse;
}
+
+ public static Document pwrGnrSimPdfHtml(Document doc, PwrGnrSimResponse data)
+ throws IOException, QcastException {
+ Element elm;
+
+ // 상단 요약정보
+ elm = doc.getElementById("objectNo");
+ elm.text(
+ ObjectUtils.nullSafeToString(data.getObjectNo() + " (Plan No : " + data.getPlanNo() + ")"));
+
+ elm = doc.getElementById("drawingEstimateCreateDate");
+ elm.text(ObjectUtils.nullSafeToString(data.getDrawingEstimateCreateDate()));
+
+ elm = doc.getElementById("prefName");
+ elm.text(ObjectUtils.nullSafeToString(data.getPrefName()));
+
+ elm = doc.getElementById("areaName");
+ elm.text(ObjectUtils.nullSafeToString(data.getAreaName()));
+
+ elm = doc.getElementById("capacity");
+ elm.text(ObjectUtils.nullSafeToString(data.getCapacity()));
+
+ elm = doc.getElementById("anlFrcsGnrt");
+ elm.text(ObjectUtils.nullSafeToString(data.getAnlFrcsGnrt()));
+
+ elm = doc.getElementById("snowfall");
+ elm.text(ObjectUtils.nullSafeToString(data.getSnowfall()));
+
+ elm = doc.getElementById("standardWindSpeedId");
+ elm.text(ObjectUtils.nullSafeToString(data.getStandardWindSpeedId()));
+
+ if (data.getFrcPwrGnrList() != null && data.getFrcPwrGnrList().length > 0) {
+
+ int[] onlyData =
+ Arrays.copyOfRange(data.getFrcPwrGnrList(), 0, data.getFrcPwrGnrList().length - 1);
+
+ int referenceValue = 300; // table 높이
+ int orgMaxValue =
+ Arrays.stream(onlyData)
+ .max()
+ .orElseThrow(() -> new QcastException(ErrorCode.INTERNAL_SERVER_ERROR, "배열이 없음"));
+ int maxValue = roundUpAuto(orgMaxValue / 8);
+
+ // chart y축
+ StringBuilder sb = new StringBuilder();
+ for (int i = 8; i >= 1; i--) {
+ sb.append("");
+ sb.append("| ")
+ .append(maxValue * i)
+ .append(" | ");
+ sb.append("
");
+ }
+ sb.append("");
+ sb.append("| 0 | ");
+ elm = doc.getElementById("htmlY");
+ elm.append(sb.toString());
+
+ // chart 데이터
+ String[] color = {
+ "#B5D4F5", "#FFE899", "#FBC3AB", "#D1D1D1", "#FFE899", "#B5D0F0", "#C1E4B8", "#A3C9EE",
+ "#F7BBA2", "#BEBEBE", "#A8BBE0", "#B5D7A3"
+ };
+ StringBuilder sb2 = new StringBuilder();
+ for (int i = 0; i < onlyData.length; i++) {
+ double scaledValues = ((double) onlyData[i] / (maxValue * 8)) * referenceValue;
+
+ sb2.append("");
+
+ sb2.append("")
+ .append("")
+ .append("")
+ .append(" | ")
+ .append(" ")
+ .append("")
+ .append(" | ")
+ .append(" ")
+ .append("")
+ .append(" | ")
+ .append(" ")
+ .append("")
+ .append(" | ")
+ .append(" ")
+ .append("")
+ .append(" | ")
+ .append(" ")
+ .append("")
+ .append(" | ")
+ .append(" ")
+ .append("")
+ .append(" | ")
+ .append(" ")
+ .append("")
+ .append(" | ")
+ .append(" ")
+ .append("")
+ .append(" | ")
+ .append(" ")
+ .append("")
+ .append(" ");
+
+ sb2.append(
+ "");
+ sb2.append(" | ");
+ }
+ elm = doc.getElementById("htmlX");
+ elm.append(sb2.toString());
+ }
+
+ // 예측발전량
+ if (data.getFrcPwrGnrList() != null && data.getFrcPwrGnrList().length > 0) {
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < 13; i++) {
+ sb.append("" + ObjectUtils.nullSafeToString(data.getFrcPwrGnrList()[i]) + " | ");
+ }
+
+ elm = doc.getElementById("frcPwrGnrList_detail");
+ elm.append(sb.toString());
+ }
+
+ // 모듈 list
+ if (data.getRoofModuleList() != null && data.getRoofModuleList().size() > 0) {
+ StringBuilder sb = new StringBuilder();
+
+ for (int i = 0; i < data.getRoofModuleList().size(); i++) {
+ PwrGnrSimRoofResponse listItem = data.getRoofModuleList().get(i);
+
+ sb.append("
");
+ sb.append("| " + ObjectUtils.nullSafeToString(listItem.getRoofSurface()) + " | ");
+ sb.append(
+ ""
+ + Optional.ofNullable(listItem.getSlope()).orElse("")
+ + ""
+ + Optional.ofNullable(listItem.getAngle()).orElse("")
+ + " | ");
+ sb.append("" + ObjectUtils.nullSafeToString(listItem.getAzimuth()) + " | ");
+ sb.append("" + ObjectUtils.nullSafeToString(listItem.getItemNo()) + " | ");
+ sb.append("" + ObjectUtils.nullSafeToString(listItem.getAmount()) + " | ");
+ sb.append("
");
+ }
+
+ elm = doc.getElementById("roofModuleList_detail");
+ elm.append(sb.toString());
+ }
+
+ // pcs list
+ if (data.getPcsList() != null && data.getPcsList().size() > 0) {
+ StringBuilder sb = new StringBuilder();
+
+ for (int i = 0; i < data.getPcsList().size(); i++) {
+ PwrGnrSimRoofResponse listItem = data.getPcsList().get(i);
+
+ sb.append("");
+ sb.append("| " + ObjectUtils.nullSafeToString(listItem.getItemNo()) + " | ");
+ sb.append("" + ObjectUtils.nullSafeToString(listItem.getAmount()) + " | ");
+ sb.append("
");
+ }
+
+ elm = doc.getElementById("pcsList_detail");
+ elm.append(sb.toString());
+ }
+
+ return doc;
+ }
+
+ public static int roundUpAuto(double value) {
+ int length = (int) Math.log10(value) + 1; // 숫자의 자리수를 계산
+ int place = (int) Math.pow(10, length - 1); // 자리수에 따른 올림 기준(10, 100, 1000 등)
+
+ return (int) Math.ceil(value / place) * place;
+ }
}
diff --git a/src/main/java/com/interplug/qcast/util/ExcelUtil.java b/src/main/java/com/interplug/qcast/util/ExcelUtil.java
index 66d5b424..90213d47 100644
--- a/src/main/java/com/interplug/qcast/util/ExcelUtil.java
+++ b/src/main/java/com/interplug/qcast/util/ExcelUtil.java
@@ -26,7 +26,9 @@ public class ExcelUtil {
* @param map 엑셀 출력데이터
* @param list 엑셀 출력 목록 데이터
* @param fileName 다운로드 파일명
- * @param templateFilePath 템플릿 파일경로
+ * @param templateFileName
+ * @throws ParsePropertyException
+ * @throws InvalidFormatException
*/
public void download(
HttpServletRequest request,
@@ -34,10 +36,15 @@ public class ExcelUtil {
Map map,
List