diff --git a/src/components/simulator/Simulator.jsx b/src/components/simulator/Simulator.jsx index 9e7768a1..d9eb6f49 100644 --- a/src/components/simulator/Simulator.jsx +++ b/src/components/simulator/Simulator.jsx @@ -4,14 +4,13 @@ import 'chart.js/auto' import { Bar } from 'react-chartjs-2' import dayjs from 'dayjs' -import { useEffect, useState } from 'react' +import { useEffect, useState, useRef } from 'react' import { useRecoilState, useRecoilValue } from 'recoil' import { floorPlanObjectState } from '@/store/floorPlanObjectAtom' import { useAxios } from '@/hooks/useAxios' import { useMessage } from '@/hooks/useMessage' import { usePlan } from '@/hooks/usePlan' -import { useCommonCode } from '@/hooks/common/useCommonCode' import { useCanvasMenu } from '@/hooks/common/useCanvasMenu' import { convertNumberToPriceDecimal, isEmptyArray } from '@/util/common-utils' @@ -20,6 +19,8 @@ export default function Simulator() { const { plans } = usePlan() const plan = plans.find((plan) => plan.isCurrent === true) + const chartRef = useRef(null) + // recoil 물건번호 const objectRecoil = useRecoilValue(floorPlanObjectState) const [objectNo, setObjectNo] = useState('') @@ -38,41 +39,14 @@ export default function Simulator() { const { get } = useAxios() const { getMessage } = useMessage() - // 공통코드 조회 - const { commonCode, findCommonCode } = useCommonCode() - const [prefCodeList, setPrefCodeList] = useState([]) // 도도부현 코드 - const [areaIdList, setAreaIdList] = useState([]) // 시뮬레이션 코드 - const [windSpeedList, setWindSpeedList] = useState([]) // 기준 풍속 공통코드 - - useEffect(() => { - const code1 = findCommonCode(202000) // 기준풍속 - if (code1 != null) { - setWindSpeedList(code1) - } - }, [commonCode]) - - const chartData = [ - Math.floor(Math.random() * 1000), - Math.floor(Math.random() * 2000), - Math.floor(Math.random() * 3000), - Math.floor(Math.random() * 4000), - Math.floor(Math.random() * 5000), - Math.floor(Math.random() * 6000), - Math.floor(Math.random() * 6000), - Math.floor(Math.random() * 5000), - Math.floor(Math.random() * 4000), - Math.floor(Math.random() * 3000), - Math.floor(Math.random() * 2000), - Math.floor(Math.random() * 1000), - ] - // 차트 관련 + const [chartData1, setChartData1] = useState([]) const data = { labels: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], datasets: [ { label: 'kWh', - data: chartData, + data: chartData1.slice(0, 12), backgroundColor: [ 'rgba(255, 99, 132, 0.2)', @@ -133,48 +107,46 @@ export default function Simulator() { fetchObjectDetail(objectNo) } fetchSimulatorNotice() - }, [objectNo]) + }, [objectNo, plan]) // 물건 상세 정보 조회 const [objectDetail, setObjectDetail] = useState({}) - const fetchObjectDetail = async (objectNo) => { - const apiUrl = `/api/object/${objectNo}/detail` - const resultData = await get({ url: apiUrl }) - - if (resultData) { - if (resultData.prefId) { - get({ url: '/api/object/prefecture/list' }).then((res) => { - if (!isEmptyArray(res)) { - setPrefCodeList(res) - } - }) - get({ url: `/api/object/prefecture/${resultData.prefId}/list` }).then((res) => { - if (!isEmptyArray(res)) { - setAreaIdList(res) - } - }) - } - setObjectDetail(resultData) - } - } - // 모듈배치정보 조회 const [moduleInfoList, setModuleInfoList] = useState([]) // 파워컨디셔너 조회 const [pcsInfoList, setPcsInfoList] = useState([]) + const fetchObjectDetail = async (objectNo) => { + const apiUrl = `/api/pwrGnrSimulation/calculations?objectNo=${objectNo}&planNo=${plan?.id}` + const resultData = await get({ url: apiUrl }) + if (resultData) { + console.log(resultData) + setObjectDetail(resultData) + if (resultData.frcPwrGnrList) { + setChartData1(resultData.frcPwrGnrList) + } + if (resultData.pcsList) { + setPcsInfoList(resultData.pcsList) + } + if (resultData.roofModuleList) { + setModuleInfoList(resultData.roofModuleList) + } + } + } + // 시뮬레이션 안내사항 조회 const [content, setContent] = useState('') const fetchSimulatorNotice = async () => { - const resultData = '1234123\r\n12\r\n3\r\n123\r\n12\r\n312\r\n312\r\n3123123123123\r\n\r\nㅅㄷㄴㅅ\r\nㅁㅅㄷㄴㅁㅅㄴㅁㅅㄴㅅ' - if (resultData) { - setContent(resultData.replaceAll('\n', '
')) - } else { - setContent(getMessage('common.message.no.data')) - } + get({ url: '/api/pwrGnrSimulation/guideInfo' }).then((res) => { + if (res.data) { + setContent(res.data.replaceAll('\n', '
')) + } else { + setContent(getMessage('common.message.no.data')) + } + }) } return ( @@ -187,56 +159,45 @@ export default function Simulator() {
{getMessage('simulator.title.sub1')}
- {objectNo} (Plan No: {plan?.id}) + {objectDetail.objectNo} (Plan No: {objectDetail.planNo})
{/* 작성일 */}
{getMessage('simulator.title.sub2')}
-
{`${dayjs(objectDetail.lastEditDatetime).format('YYYY.MM.DD')}`}
+
{`${dayjs(objectDetail.drawingEstimateCreateDate).format('YYYY.MM.DD')}`}
{/* 시스템용량 */}
{getMessage('simulator.title.sub3')}
-
??? kW
+
{convertNumberToPriceDecimal(objectDetail.capacity)}kW
{/* 연간예측발전량 */}
{getMessage('simulator.title.sub4')}
-
???
+
{convertNumberToPriceDecimal(objectDetail.anlFrcsGnrt)}
{/* 도도부현 */}
{getMessage('simulator.title.sub5')}
-
- {prefCodeList.map((prefCode) => (prefCode.prefId === objectDetail.prefId ? prefCode.prefName : ''))} - {` `} - {objectDetail.address} -
+
{objectDetail.prefName}
{/* 일사량 관측지점 */}
{getMessage('simulator.title.sub6')}
-
- {areaIdList.map((areaCode) => (areaCode.areaId === objectDetail.areaId ? areaCode.prefName : ''))} -
+
{objectDetail.areaName}
{/* 적설조건 */}
{getMessage('simulator.title.sub7')}
-
- {objectDetail.verticalSnowCover} - {objectDetail.verticalSnowCover && 'cm'} -
+
{objectDetail.snowfall}
{/* 풍속조건 */}
{getMessage('simulator.title.sub8')}
-
- {windSpeedList.map((windSpeed) => (windSpeed.clCode === objectDetail.standardWindSpeedId ? windSpeed.clCodeNm : ''))} -
+
{objectDetail.standardWindSpeedId}
@@ -246,7 +207,7 @@ export default function Simulator() {
- +
@@ -274,12 +235,7 @@ export default function Simulator() { - - {chartData.map((data) => ( - {convertNumberToPriceDecimal(data)} - ))} - {convertNumberToPriceDecimal(chartData.reduce((a, b) => a + b))} - + {chartData1.length > 0 && chartData1.map((data) => {convertNumberToPriceDecimal(data)})}
@@ -303,19 +259,19 @@ export default function Simulator() { moduleInfoList.map((moduleInfo) => { return ( <> - + {/* 지붕면 */} - 西南西1 + {moduleInfo.roofSurface} {/* 경사각 */} - 0.3寸 + {convertNumberToPriceDecimal(moduleInfo.slope)}寸 {/* 방위각(도) */} - 81 + {convertNumberToPriceDecimal(moduleInfo.angle)} {/* 태양전지모듈 */} -
Re.RISE-G2 415
+
{moduleInfo.itemNo}
{/* 매수 */} - 20 + {moduleInfo.amount} ) @@ -330,7 +286,9 @@ export default function Simulator() { {moduleInfoList.length > 0 && (
{getMessage('simulator.table.sub6')}
-
0
+
+ {moduleInfoList.reduce((acc, moduleInfo) => convertNumberToPriceDecimal(Number(acc) + Number(moduleInfo.amount)), 0)} +
)}
@@ -349,13 +307,13 @@ export default function Simulator() { pcsInfoList.map((pcsInfo) => { return ( <> - + {/* 파워컨디셔너 */} -
HQJP-MA55-3
+
{pcsInfo.itemNo}
{/* 대 */} - 2 + {pcsInfo.amount} )