From ec835750f6016ab7d0e6023489e59cf240aa5fc2 Mon Sep 17 00:00:00 2001 From: changkyu choi Date: Wed, 5 Feb 2025 20:51:30 +0900 Subject: [PATCH] =?UTF-8?q?=ED=9A=8C=EB=A1=9C=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EC=88=98=EB=8F=99=ED=9A=8C=EB=A1=9C=20=ED=95=A0=EB=8B=B9=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modal/circuitTrestle/step/StepUp.jsx | 137 ++++++++++++------ src/hooks/common/useMasterController.js | 13 ++ 2 files changed, 105 insertions(+), 45 deletions(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx index 90d40c2f..30d40de5 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx @@ -12,7 +12,6 @@ import { useMasterController } from '@/hooks/common/useMasterController' import { v4 as uuidv4 } from 'uuid' import { globalLocaleStore } from '@/store/localeAtom' import { POLYGON_TYPE } from '@/common/common' -import { circuitNumDisplaySelector } from '@/store/settingAtom' export default function StepUp(props) { const { @@ -33,7 +32,7 @@ export default function StepUp(props) { const [moduleTabs, setModuleTabs] = useState({}) const [arrayLength, setArrayLength] = useState(3) //module-table-inner의 반복 개수 const [pcsCheck, setPcsCheck] = useRecoilState(pcsCheckState) - const { getPcsVoltageStepUpList, getPcsAutoRecommendList, getPcsVoltageChk } = useMasterController() + const { getPcsVoltageStepUpList, getPcsAutoRecommendList, getPcsVoltageChk, getPcsConnOptionItemList } = useMasterController() const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext) const canvas = useRecoilValue(canvasState) const selectedModules = useRecoilValue(selectedModuleState) @@ -52,20 +51,19 @@ export default function StepUp(props) { // } useEffect(() => { - // PCS 승압설정 정보 조회 + console.log(allocationType) + if (allocationType === 'auto') { - fetchStepUpData() + // PCS 자동 승압설정 정보 조회 + fetchAutoStepUpData() } else { - // 1-1 2-2 - canvas - .getObjects() - .filter((obj) => obj.name === POLYGON_TYPE.MODULE && obj.circuit) - .map((module) => module.circuitNumber) + // PCS 수동 승압설정 정보 조회 + fetchPassiStepUpData() } }, []) - // PCS 승압설정 정보 조회 - const fetchStepUpData = async () => { + // PCS 자동 승압설정 정보 조회 + const fetchAutoStepUpData = async () => { try { const params = { ...props.getOptYn(), // 옵션 Y/N @@ -107,6 +105,89 @@ export default function StepUp(props) { } } + // PCS 수동 승압설정 정보 조회 + const fetchPassiStepUpData = async () => { + try { + // 1-1 2-2 + // canvas + // .getObjects() + // .filter((obj) => obj.name === POLYGON_TYPE.MODULE && obj.circuit) + // .map((module) => module.circuitNumber) + + // 모듈 데이터 가져오기 + const modules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE) + + // PCS별 회로 정보를 저장할 객체 + const pcsSummary = {} + + // 각 모듈을 순회하며 PCS별 회로 정보 수집 + modules.forEach((module) => { + if (!module.circuit || !module.pcsItemId) return + + if (!pcsSummary[module.pcsItemId]) { + pcsSummary[module.pcsItemId] = { + circuits: {}, + totalModules: 0, + } + } + + const circuitNumber = module.circuitNumber + if (!pcsSummary[module.pcsItemId].circuits[circuitNumber]) { + pcsSummary[module.pcsItemId].circuits[circuitNumber] = 0 + } + pcsSummary[module.pcsItemId].circuits[circuitNumber]++ + pcsSummary[module.pcsItemId].totalModules++ + }) + + const params = { + useModuleItemList: props.getUseModuleItemList(), + pcsItemList: getSelectedPcsItemList(), + } + + // PCS 접속함 및 옵션 목록 조회 + getPcsConnOptionItemList(params).then((res) => { + if (res?.result.code === 200 && res?.data) { + // PCS 아이템 리스트에 serQtyList 추가 + const pcsItemListWithSerQty = res.data.pcsItemList.map((pcsItem) => { + const pcsData = pcsSummary[pcsItem.itemId] || { circuits: {}, totalModules: 0 } + const circuitCounts = Object.values(pcsData.circuits) + return { + ...pcsItem, + serQtyList: [ + { + // 한 회로당 최대 모듈 수 + serQty: circuitCounts.length > 0 ? Math.max(...circuitCounts) : 0, + // 회로 개수 + paralQty: Object.keys(pcsData.circuits).length || 0, + rmdYn: 'Y', + usePossYn: 'Y', + roofSurfaceList: props.getRoofSurfaceList(), + }, + ], + } + }) + + // Update res.data with modified pcsItemList + res.data.pcsItemList = pcsItemListWithSerQty + setSelectedModels(pcsItemListWithSerQty) + + const dataArray = Array.isArray(res.data) ? res.data : [res.data] + const stepUpListData = formatStepUpListData(dataArray) + + // PCS 승압설정 정보 SET + setStepUpListData(stepUpListData) + + // PCS 옵션 조회 + const formattedOptCodes = formatOptionCodes(res.data.optionList) + setOptCodes(formattedOptCodes) + setSeletedOption(formattedOptCodes[0]) + } + }) + } catch (error) { + console.error('Error fetching step up data:', error) + } + } + // PCS 옵션 조회 const formatOptionCodes = (optionList = []) => { return optionList?.map((opt) => ({ @@ -125,40 +206,6 @@ export default function StepUp(props) { selectedPcsItem: formatPcsItemList(stepUps.pcsItemList), })) - // 초기 추천 값들을 selectedValues에 저장 - const initialSelectedValues = {} - formattedData.forEach((stepUp) => { - stepUp.pcsItemList.forEach((pcsItem, pcsIdx) => { - const pcsKey = `${pcsItem.goodsNo}_${pcsIdx}` - - // 추천 값(rmdYn === 'Y') 찾기 - const recommendedRow = pcsItem.serQtyList.find((item) => item.rmdYn === 'Y') - if (recommendedRow) { - const selectionData = { - stepUpId: pcsItem.goodsNo, - pcsInfo: { - itemId: pcsItem.itemId, - goodsNo: pcsItem.goodsNo, - pcsMkrCd: pcsItem.pcsMkrCd, - pcsSerCd: pcsItem.pcsSerCd, - }, - allocation: { - serQty: recommendedRow.serQty, - paralQty: recommendedRow.paralQty, - }, - } - - initialSelectedValues[pcsItem.goodsNo] = { - ...initialSelectedValues[pcsItem.goodsNo], - [pcsKey]: selectionData, - } - } - }) - }) - - // 초기 추천 값들을 selectedValues에 저장 - setSelectedValues(initialSelectedValues) - return formattedData } diff --git a/src/hooks/common/useMasterController.js b/src/hooks/common/useMasterController.js index 85236e9c..2c488c83 100644 --- a/src/hooks/common/useMasterController.js +++ b/src/hooks/common/useMasterController.js @@ -241,6 +241,18 @@ export function useMasterController() { return await put({ url: '/api/object/update-object-date', data: params }) } + /** + * PCS 접속함 및 옵션 목록 조회 + * @param {사용된 모듈 아이템 목록} useModuleItemList + * @param {PCS 제품 목록} pcsItemList + * @returns + */ + const getPcsConnOptionItemList = async (params = null) => { + return await post({ url: '/api/v1/master/getPcsConnOptionItemList', data: params }).then((res) => { + return res + }) + } + return { getRoofMaterialList, getModuleTypeItemList, @@ -255,5 +267,6 @@ export function useMasterController() { getPcsVoltageStepUpList, updateObjectDate, getQuotationItem, + getPcsConnOptionItemList, } }