From 0eb888fbb93570e9a457880442ce636ce4148fa4 Mon Sep 17 00:00:00 2001 From: ysCha Date: Wed, 22 Apr 2026 13:35:47 +0900 Subject: [PATCH] =?UTF-8?q?Cross=20Mix(DC3)=20=EC=A0=91=EC=86=8D=ED=95=A8?= =?UTF-8?q?=EC=9D=84=20PCS=20=EB=8B=B4=EB=8B=B9=20=EB=AA=A8=EB=93=88=20?= =?UTF-8?q?=ED=83=80=EC=9E=85=EC=9C=BC=EB=A1=9C=20=ED=95=84=ED=84=B0?= =?UTF-8?q?=EB=A7=81=ED=95=B4=201=EA=B1=B4=EB=A7=8C=20=EB=82=B4=EB=A0=A4?= =?UTF-8?q?=EA=B0=80=EB=8F=84=EB=A1=9D=20=ED=86=B5=ED=95=A9=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../circuitTrestle/CircuitTrestleSetting.jsx | 27 +++++++++++--- .../modal/circuitTrestle/step/StepUp.jsx | 37 ++++++++++++++----- 2 files changed, 49 insertions(+), 15 deletions(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx index 24c5a44d..aa52d6f5 100644 --- a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx @@ -831,9 +831,23 @@ export default function CircuitTrestleSetting({ id }) { // 승압설정 목록 조회 const getStepUpListData = () => { + // PCS 인스턴스별 실제 담당 모듈 타입 집합 수집 (Cross Mix DC3 접속함 분리용) + const pcsModuleTpCds = {} + canvas + .getObjects() + .filter((obj) => obj.name === POLYGON_TYPE.MODULE && obj.circuit && obj.pcsItemId) + .forEach((module) => { + const pcsInstanceId = module.circuit?.circuitInfo?.id + const tpCd = module.moduleInfo?.moduleTpCd + if (!pcsInstanceId || !tpCd) return + if (!pcsModuleTpCds[pcsInstanceId]) pcsModuleTpCds[pcsInstanceId] = new Set() + pcsModuleTpCds[pcsInstanceId].add(tpCd) + }) + const pcs = [] console.log(stepUpListData) stepUpListData[0].pcsItemList.map((item, index) => { + const targetTpCds = pcsModuleTpCds[selectedModels[index]?.id] return item.serQtyList .filter((serQty) => serQty.selected && serQty.paralQty > 0) .forEach((serQty) => { @@ -843,14 +857,17 @@ export default function CircuitTrestleSetting({ id }) { pcsItemId: item.itemId, pscOptCd: getPcsOptCd(index), paralQty: serQty.paralQty, - // 접속함 중복 체크: (itemId, moduleTpCd) 조합 기준으로 dedupe (Cross Mix 구분) + // 접속함: PCS가 실제 담당하는 모듈 타입으로 필터 후 itemId 기준 dedupe + // (Cross Mix 시 다른 모듈 계열의 conn 제외 / 단일·동계열 Mix는 기존과 동일 결과) connections: item.connList?.length ? [ ...new Map( - item.connList.map((conn) => [ - `${conn.itemId}_${conn.moduleTpCd}`, - { connItemId: conn.itemId, connMaxParalCnt: conn.connMaxParalCnt, moduleTpCd: conn.moduleTpCd }, - ]), + item.connList + .filter((conn) => !targetTpCds || !conn.moduleTpCd || targetTpCds.has(conn.moduleTpCd)) + .map((conn) => [ + conn.itemId, + { connItemId: conn.itemId, connMaxParalCnt: conn.connMaxParalCnt, moduleTpCd: conn.moduleTpCd }, + ]), ).values(), ] : [], diff --git a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx index 60f44db3..58a8e190 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx @@ -577,7 +577,21 @@ export default function StepUp(props) { * 현재 선택된 값들을 가져오는 함수 추가 */ const getCurrentSelections = () => { - const selectedValues = stepUpListData[0].pcsItemList.forEach((item) => { + // PCS 인스턴스별 실제 담당 모듈 타입 집합 수집 (Cross Mix DC3 접속함 분리용) + const pcsModuleTpCds = {} + canvas + .getObjects() + .filter((obj) => obj.name === POLYGON_TYPE.MODULE && obj.circuit && obj.pcsItemId) + .forEach((module) => { + const pcsInstanceId = module.circuit?.circuitInfo?.id + const tpCd = module.moduleInfo?.moduleTpCd + if (!pcsInstanceId || !tpCd) return + if (!pcsModuleTpCds[pcsInstanceId]) pcsModuleTpCds[pcsInstanceId] = new Set() + pcsModuleTpCds[pcsInstanceId].add(tpCd) + }) + + const selectedValues = stepUpListData[0].pcsItemList.forEach((item, index) => { + const targetTpCds = pcsModuleTpCds[selectedModels[index]?.id] item.serQtyList.filter((serQty) => serQty.selected) return item.serQtyList.map((serQty) => { return { @@ -586,18 +600,21 @@ export default function StepUp(props) { pcsItemId: serQty.itemId, pcsOptCd: seletedOption, paralQty: serQty.paralQty, - // 접속함 중복 체크: (itemId, moduleTpCd) 조합 기준으로 dedupe + // 접속함: PCS가 실제 담당하는 모듈 타입으로 필터 후 itemId 기준 dedupe + // (Cross Mix 시 다른 모듈 계열의 conn 제외 / 단일·동계열 Mix는 기존과 동일 결과) connections: item.connList?.length ? [ ...new Map( - item.connList.map((conn) => [ - `${conn.itemId}_${conn.moduleTpCd}`, - { - connItemId: conn.itemId, - connMaxParalCnt: conn.connMaxParalCnt, - moduleTpCd: conn.moduleTpCd, - }, - ]), + item.connList + .filter((conn) => !targetTpCds || !conn.moduleTpCd || targetTpCds.has(conn.moduleTpCd)) + .map((conn) => [ + conn.itemId, + { + connItemId: conn.itemId, + connMaxParalCnt: conn.connMaxParalCnt, + moduleTpCd: conn.moduleTpCd, + }, + ]), ).values(), ] : [],