diff --git a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx index 35774e8a..a0d2b34f 100644 --- a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx @@ -18,6 +18,7 @@ import { canvasState } from '@/store/canvasAtom' import { useTrestle } from '@/hooks/module/useTrestle' import { selectedModuleState } from '@/store/selectedModuleOptions' +import { v4 as uuidv4 } from 'uuid' const ALLOCATION_TYPE = { AUTO: 'auto', @@ -43,29 +44,6 @@ export default function CircuitTrestleSetting({ id }) { const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext) const selectedModules = useRecoilValue(selectedModuleState) const { getPcsAutoRecommendList } = useMasterController() - const powerConditionalSelectProps = { - tabNum, - setTabNum, - makers, - setMakers, - selectedMaker, - setSelectedMaker, - series, - setSeries, - models, - setModels, - selectedModels, - setSelectedModels, - managementState, - } - - const passivityProps = { - tabNum, - setTabNum, - pcsCheck, - selectedModels, - setSelectedModels, - } useEffect(() => { if (!managementState) { @@ -73,6 +51,14 @@ export default function CircuitTrestleSetting({ id }) { } }, []) + useEffect(() => { + if (allocationType === ALLOCATION_TYPE.PASSIVITY && tabNum === 2) { + const notAllocationModules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE && !obj.circuit) + canvas.remove(...notAllocationModules) + canvas.renderAll() + } + }, [tabNum]) + const onAutoRecommend = () => { if (series.filter((s) => s.selected).length === 0) { swalFire({ @@ -91,7 +77,14 @@ export default function CircuitTrestleSetting({ id }) { getPcsAutoRecommendList(params).then((res) => { if (res.data?.pcsItemList) { - setModels(res.data.pcsItemList) + setModels( + res.data.pcsItemList.map((model) => { + return { + ...model, + id: uuidv4(), + } + }), + ) setTabNum(2) } else { // 데이터가 없는 경우 오류 메시지 확인 필요 @@ -152,6 +145,8 @@ export default function CircuitTrestleSetting({ id }) { moduleList: obj.modules.map((module) => { return { itemId: module.moduleInfo.itemId, + circuit: module.circuitNumber ? module.circuitNumber : null, + pcsItemId: module.circuit ? module.circuit?.pcsItemId : null, } }), } @@ -190,11 +185,33 @@ export default function CircuitTrestleSetting({ id }) { const onPassivityAllocation = () => { if (selectedModels.length === 0) { - swalFire({ - title: '파워 컨디셔너를 추가해 주세요.', - type: 'alert', + const params = { + ...getOptYn(), + useModuleItemList: getUseModuleItemList(), + roofSurfaceList: getRoofSurfaceList(), + pcsItemList: getPcsItemList(), + } + + getPcsAutoRecommendList(params).then((res) => { + if (res.data?.pcsItemList) { + const itemList = models.filter((model) => { + return res.data?.pcsItemList.map((item) => item.itemId).includes(model.itemId) + }) + setSelectedModels( + itemList.map((model) => { + return { + ...model, + id: uuidv4(), + } + }), + ) + } else { + swalFire({ + title: '파워컨디셔너를 추가해 주세요.', + type: 'alert', + }) + } }) - return } else if (pcsCheck.max) { const moduleStdQty = selectedModels.reduce((acc, model) => { return acc + parseInt(model.moduleStdQty) @@ -218,6 +235,52 @@ export default function CircuitTrestleSetting({ id }) { setAllocationType(ALLOCATION_TYPE.PASSIVITY) } + const onClickPrev = () => { + setAllocationType(ALLOCATION_TYPE.AUTO) + swalFire({ + text: '할당한 회로 번호가 초기화됩니다.', + type: 'alert', + icon: 'warning', + confirmFn: () => { + const circuitModules = canvas + .getObjects() + .filter((obj) => obj.name === 'module' && selectedModels.map((model) => model.id).includes(obj.circuit?.circuitInfo?.id)) + canvas.remove(...circuitModules.map((module) => module.circuit)) + circuitModules.forEach((obj) => { + obj.circuit = null + obj.pcsItemId = null + }) + }, + }) + } + + const powerConditionalSelectProps = { + tabNum, + setTabNum, + makers, + setMakers, + selectedMaker, + setSelectedMaker, + series, + setSeries, + models, + setModels, + selectedModels, + setSelectedModels, + managementState, + } + + const passivityProps = { + tabNum, + setTabNum, + pcsCheck, + selectedModels, + setSelectedModels, + getOptYn, + getUseModuleItemList, + getRoofSurfaceList, + } + const stepUpProps = { tabNum, setTabNum, @@ -231,8 +294,6 @@ export default function CircuitTrestleSetting({ id }) { getPcsItemList, // PCS 아이템 목록 } - console.log('🚀 ~ stepUpProps ~ stepUpProps:', stepUpProps) - return (
diff --git a/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx b/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx index 3c581e6f..407c5e34 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx @@ -64,6 +64,7 @@ export default function PowerConditionalSelect(props) { useEffect(() => { if (makers.length === 0) { getPcsMakerList().then((res) => { + console.log('getPcsMakerList', res.data) setMakers(res.data) }) } @@ -90,6 +91,7 @@ export default function PowerConditionalSelect(props) { } const onCheckSeries = (data) => { + console.log('data', data) const copySeries = series.map((s) => { return { ...s, @@ -97,12 +99,19 @@ export default function PowerConditionalSelect(props) { } }) setSeries(copySeries) + console.log('copySeries', copySeries) handleSetmodels(copySeries.filter((s) => s.selected)) } - const handleSetmodels = (series) => { - const pcsMkrCd = series[0]?.pcsMkrCd - const pcsSerList = series.map((series) => { + const handleSetmodels = (selectedSeries) => { + console.log('series', selectedSeries) + if (selectedSeries.length === 0) { + setModels([]) + setSelectedModels([]) + return + } + const pcsMkrCd = selectedSeries[0]?.pcsMkrCd + const pcsSerList = selectedSeries.map((series) => { return { pcsSerCd: series.pcsSerCd } }) const moduleItemList = selectedModules.itemList?.map((module) => { @@ -123,11 +132,10 @@ export default function PowerConditionalSelect(props) { } }), ) - return + } else { + setModels([]) + setSelectedModels([]) } - - setModels([]) - setSelectedModels([]) }) } @@ -146,15 +154,16 @@ export default function PowerConditionalSelect(props) { } const onRemoveSelectedModel = (model) => { - setModels(models.map((m) => ({ ...m, selected: m.code !== model.code ? m.selected : false }))) + setSelectedModels(selectedModels.filter((m) => m.id !== model.id)) } const onChangeMaker = (option) => { if (option) { - setModels(null) + setModels([]) setSelectedMaker(option) getPcsMakerList(option).then((res) => { + console.log('getPcsMakerList(series)', res.data) setSeries( res.data.map((series) => { return { ...series, selected: false } diff --git a/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx b/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx index e1c2b29b..a8cb2e7f 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx @@ -2,6 +2,7 @@ import { GlobalDataContext } from '@/app/GlobalDataProvider' import { POLYGON_TYPE } from '@/common/common' import { useMasterController } from '@/hooks/common/useMasterController' import { useMessage } from '@/hooks/useMessage' +import { useSwal } from '@/hooks/useSwal' import { canvasState } from '@/store/canvasAtom' import { moduleStatisticsState } from '@/store/circuitTrestleAtom' import { selectedModuleState } from '@/store/selectedModuleOptions' @@ -9,7 +10,17 @@ import { useContext, useEffect, useState } from 'react' import { useRecoilValue } from 'recoil' export default function PassivityCircuitAllocation(props) { - const { tabNum, setTabNum, selectedModels, pcsCheck } = props + const { + tabNum, + setTabNum, + selectedModels, + getOptYn: getApiProps, + getUseModuleItemList: getSelectedModuleList, + getSelectModelList: getSelectModelList, + getRoofSurfaceList, + getModelList, + } = props + const { swalFire } = useSwal() const { getMessage } = useMessage() const canvas = useRecoilValue(canvasState) const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext) @@ -17,17 +28,40 @@ export default function PassivityCircuitAllocation(props) { const moduleStatistics = useRecoilValue(moduleStatisticsState) // const [totalWpout, setTotalWpout] = useState(0) const [selectedPcs, setSelectedPcs] = useState(selectedModels[0]) - const { header, rows: row } = moduleStatistics - const [headers, setHeaders] = useState(header) - const [rows, setRows] = useState(row) + // const { header, rows: row } = moduleStatistics + const [header, setHeader] = useState(moduleStatistics.header) + const [rows, setRows] = useState(moduleStatistics.rows) const [footer, setFooter] = useState(['합계']) const [circuitNumber, setCircuitNumber] = useState(1) const [targetModules, setTargetModules] = useState([]) - const { pcsMaualConfChk } = useMasterController() + const { getPcsManualConfChk } = useMasterController() useEffect(() => { - console.log('🚀 ~ PassivityCircuitAllocation ~ targetModules:', targetModules) - }, [targetModules]) + console.log('header, rows', header, rows) + console.log('selectedModels', selectedModels) + // setSurfaceInfo() + setTableData() + if (!managementState) { + setManagementState(managementStateLoaded) + } + canvas + .getObjects() + .filter((obj) => obj.name === POLYGON_TYPE.MODULE) + .forEach((obj) => { + obj.on('mousedown', (e) => handleTargetModules(obj)) + }) + + return () => { + canvas + .getObjects() + .filter((obj) => obj.name === POLYGON_TYPE.MODULE) + .forEach((obj) => { + obj.set({ strokeWidth: 0.3 }) + obj.off('mousedown') + }) + canvas.renderAll() + } + }, []) const handleTargetModules = (obj) => { if (!Array.isArray(targetModules)) { @@ -48,32 +82,9 @@ export default function PassivityCircuitAllocation(props) { canvas.renderAll() } - useEffect(() => { - setSurfaceInfo() - if (!managementState) { - setManagementState(managementStateLoaded) - } - const modules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE) - - modules.forEach((obj) => { - obj.on('mousedown', (e) => handleTargetModules(obj)) - }) - - return () => { - canvas - .getObjects() - .filter((obj) => obj.name === POLYGON_TYPE.MODULE) - .forEach((obj) => { - obj.set({ strokeWidth: 0.3 }) - obj.off('mousedown') - }) - canvas.renderAll() - } - }, []) - const setSurfaceInfo = () => { const surfaces = canvas.getObjects().filter((obj) => POLYGON_TYPE.MODULE_SETUP_SURFACE === obj.name) - setHeaders([header[0], { name: '회로', prop: 'circuit' }, ...header.slice(1)]) + // setHeaders([header[0], { name: '회로', prop: 'circuit' }, ...header.slice(1)]) setRows( rows.map((row) => { return { @@ -146,794 +157,291 @@ export default function PassivityCircuitAllocation(props) { } const handleCircuitNumberFix = () => { - console.log('🚀 ~ handleCircuitNumberFix ~ circuitNumber:', circuitNumber) - console.log('🚀 ~ handleCircuitNumberFix ~ selectedPcs:', selectedPcs) - // const params = { - // maxConnYn: pcsCheck.max ? 'Y' : 'N', - // smpCirYn: 'Y', - // coldZoneYn: 'Y', - // useModuleItemList: [{ itemId: '107077', mixMatlNo: '0' }], - // pcsItemList: [ - // { - // pcsMkrCd: 'MKR001', - // pcsSerCd: 'SER001', - // itemId: '106857', - // itemNm: 'HQJP-KA55-5 パワーコンディショナ5.5kW屋内', - // goodsNo: 'HQJP-KA55-5', - // serQtyList: [ - // { - // serQty: 5, - // paralQty: 3, - // rmdYn: 'Y', - // usePossYn: 'Y', - // roofSurfaceList: [ - // { - // roofSurfaceId: '1', - // roofSurface: '남서', - // roofSurfaceIncl: '5', - // moduleList: [ - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-1', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-1', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-1', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-1', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-1', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '2-4', - // pcsItemId: '106856', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '2-4', - // pcsItemId: '106856', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '2-4', - // pcsItemId: '106856', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '2-4', - // pcsItemId: '106856', - // }, - // ], - // cirLastIdx: 5, - // isCirLastDupCircuit: true, - // roofSurfacePossibleModuleCnt: 0, - // totCirModuleWpOut: 0, - // roofSurfaceCirModuleWpOut: 3960, - // }, - // { - // roofSurfaceId: '2', - // roofSurface: '남서', - // roofSurfaceIncl: '5', - // moduleList: [ - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-2', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-2', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-2', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-2', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-2', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: null, - // pcsItemId: null, - // }, - // ], - // cirLastIdx: 3, - // isCirLastDupCircuit: true, - // roofSurfacePossibleModuleCnt: 1, - // totCirModuleWpOut: 0, - // roofSurfaceCirModuleWpOut: 2200, - // }, - // { - // roofSurfaceId: '3', - // roofSurface: '남', - // roofSurfaceIncl: '3', - // moduleList: [ - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-3', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-3', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-3', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-3', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-3', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '2-5', - // pcsItemId: '106856', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '2-5', - // pcsItemId: '106856', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '2-5', - // pcsItemId: '106856', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '2-5', - // pcsItemId: '106856', - // }, - // ], - // cirLastIdx: 6, - // isCirLastDupCircuit: true, - // roofSurfacePossibleModuleCnt: 0, - // totCirModuleWpOut: 0, - // roofSurfaceCirModuleWpOut: 3960, - // }, - // ], - // }, - // ], - // }, - // { - // pcsMkrCd: 'MKR001', - // pcsSerCd: 'SER001', - // itemId: '106856', - // itemNm: 'HQJP-KA40-5 パワーコンディショナ4.0kW屋内', - // goodsNo: 'HQJP-KA40-5', - // circuitCfg: '4, 4', - // serQtyList: [ - // { - // pcsTpCd: 'INDFCS', - // serQty: 4, - // paralQty: 2, - // rmdYn: 'Y', - // usePossYn: 'Y', - // cirModuleWpOutSum: 3520, - // roofSurfaceList: [ - // { - // roofSurfaceId: '1', - // roofSurface: '남서', - // roofSurfaceIncl: '5', - // moduleList: [ - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-1', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-1', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-1', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-1', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-1', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '2-4', - // pcsItemId: '106856', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '2-4', - // pcsItemId: '106856', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '2-4', - // pcsItemId: '106856', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '2-4', - // pcsItemId: '106856', - // }, - // ], - // cirLastIdx: 5, - // isCirLastDupCircuit: true, - // roofSurfacePossibleModuleCnt: 0, - // totCirModuleWpOut: 0, - // roofSurfaceCirModuleWpOut: 3960, - // }, - // { - // roofSurfaceId: '2', - // roofSurface: '남서', - // roofSurfaceIncl: '5', - // moduleList: [ - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-2', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-2', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-2', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-2', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-2', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: null, - // pcsItemId: null, - // }, - // ], - // }, - // { - // roofSurfaceId: '3', - // roofSurface: '남', - // roofSurfaceIncl: '3', - // moduleList: [ - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-3', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-3', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-3', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-3', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '1-3', - // pcsItemId: '106857', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '2-5', - // pcsItemId: '106856', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '2-5', - // pcsItemId: '106856', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '2-5', - // pcsItemId: '106856', - // }, - // { - // pcsMkrCd: null, - // pcsSerCd: null, - // applySerQty: null, - // itemId: '107077', - // itemTp: null, - // wpOut: 440, - // moduleStdVol: 42, - // moduleColdZoneVol: null, - // mixMatlNo: null, - // circuit: '2-5', - // pcsItemId: '106856', - // }, - // ], - // }, - // ], - // }, - // ], - // }, - // ], - // } - // pcsMaualConfChk() + if (!circuitNumber || circuitNumber === 0) { + swalFire({ + text: '회로번호를 1 이상입력해주세요.', + type: 'alert', + icon: 'warning', + }) + return + } else if (targetModules.length === 0) { + swalFire({ + text: '모듈을 선택해주세요.', + type: 'alert', + icon: 'warning', + }) + return + } else if (selectedModels.length > 1) { + const uniqueCircuitNumbers = [ + ...new Set( + canvas + .getObjects() + .filter((obj) => obj.name === POLYGON_TYPE.MODULE && obj.circuitNumber) + .map((obj) => obj.circuitNumber), + ), + ] + + let result = false + uniqueCircuitNumbers.forEach((number) => { + if ( + number.split('-')[1] === circuitNumber + ')' && + number.split('-')[0] !== '(' + (selectedModels.findIndex((model) => model.id === selectedPcs.id) + 1) + ) { + result = true + } + }) + if (result) { + swalFire({ + text: '회로 번호가 같은 다른 파워 컨디셔너 모듈이 있습니다. 다른 회로 번호를 설정하십시오.', + type: 'alert', + icon: 'warning', + }) + return + } + } + canvas.discardActiveObject() canvas .getObjects() .filter((obj) => targetModules.includes(obj.id)) .forEach((obj) => { + const moduleCircuitText = new fabric.Text(getCircuitNumber(), { + left: obj.left + obj.width / 2, + top: obj.top + obj.height / 2, + fill: 'black', + fontSize: 20, + width: obj.width, + height: obj.height, + textAlign: 'center', + originX: 'center', + originY: 'center', + name: 'circuitNumber', + parentId: obj.id, + circuitInfo: selectedPcs, + }) obj.set({ - circuit: circuitNumber, strokeWidth: 0.3, }) - obj.pscId = selectedPcs.id - obj.pscIndex = selectedModels.findIndex((model) => model.itemId === selectedPcs.itemId) + 1 - canvas.add( - new fabric.Text(getCircuitNumber(), { - left: obj.left + obj.width / 2, - top: obj.top + obj.height / 2, - fill: 'red', - fontSize: 20, - width: obj.width, - height: obj.height, - textAlign: 'center', - originX: 'center', - originY: 'center', - name: 'circuitNumber', - parentId: obj.id, - }), - ) - canvas.renderAll() - console.log(obj) + obj.pcsItemId = selectedPcs.itemId + obj.circuit = moduleCircuitText + obj.circuitNumber = getCircuitNumber() + canvas.add(moduleCircuitText) }) - setTargetModules([]) - setCircuitNumber(+circuitNumber + 1) - canvas.renderAll() + + const roofSurfaceList = canvas + .getObjects() + .filter((obj) => POLYGON_TYPE.MODULE_SETUP_SURFACE === obj.name) + .map((surface) => { + return { + roofSurfaceId: surface.id, + roofSurface: surface.direction, + roofSurfaceIncl: canvas.getObjects().filter((obj) => obj.id === surface.parentId)[0].pitch, + moduleList: surface.modules.map((module) => { + return { + itemId: module.moduleInfo.itemId, + circuit: module.circuitNumber, + pcsItemId: module.pcsItemId, + } + }), + } + }) + + const pcsItemList = selectedModels.map((model) => { + return { + pcsMkrCd: model.pcsMkrCd, + pcsSerCd: model.pcsSerCd, + itemId: model.itemId, + itemNm: model.itemNm, + goodsNo: model.goodsNo, + serQtyList: [ + { + serQty: 0, + paralQty: 0, + rmdYn: 'Y', + usePossYn: 'Y', + roofSurfaceList: roofSurfaceList, + }, + ], + } + }) + + const params = { + ...getApiProps(), + useModuleItemList: getSelectedModuleList(), + pcsItemList: pcsItemList, + } + + getPcsManualConfChk(params).then((res) => { + if (res.resultCode === 'E') { + swalFire({ + text: res.resultMsg, + type: 'alert', + icon: 'warning', + confirmFn: () => { + const circuitNumbers = canvas.getObjects().filter((obj) => obj.name === 'circuitNumber' && targetModules.includes(obj.parentId)) + canvas.remove(...circuitNumbers) + canvas + .getObjects() + .filter((obj) => obj.name === 'module' && targetModules.includes(obj.id)) + .forEach((obj) => { + obj.pcsItemId = null + obj.circuit = null + obj.circuitNumber = null + }) + canvas.renderAll() + }, + }) + + return + } + + setTargetModules([]) + setCircuitNumber(+circuitNumber + 1) + setTableData() + }) } const getCircuitNumber = () => { if (selectedModels.length === 1) { return `(${circuitNumber})` } else { - return `(${selectedModels.findIndex((model) => model.itemId === selectedPcs.itemId) + 1}-${circuitNumber})` + return `(${selectedModels.findIndex((model) => model.id === selectedPcs.id) + 1}-${circuitNumber})` } } - const initSelectedPcsCircuitNumber = () => { - const modules = canvas.getObjects().filter((obj) => obj.name === 'circuitNumber' && obj.pscId === selectedPcs.id) - canvas.remove(...modules) - canvas - .getObjects() - .filter((obj) => obj.pscIndex === selectedPcs.id) - .forEach((obj) => { - obj.pscId = null - obj.pscIndex = null - }) + const setTableData = () => { + const tempHeader = [ + { name: '지붕면', prop: 'name' }, + { name: '회로', prop: 'circuit' }, + ...selectedModules.itemList.map((module) => { + return { + name: module.itemNm, + prop: module.itemId, + } + }), + { name: '발전량(kW)', prop: 'wpOut' }, + ] - canvas.renderAll() + const surfaces = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) + const surfaceIds = surfaces.map((surface) => surface.parentId) + const surfaceObjects = {} + const rows = surfaces.map((surface) => { + const moduleObject = {} + surfaceObjects[surface.id] = { + roofSurface: canvas.getObjects().filter((obj) => obj.id === surface.parentId)[0].directionText, + circuit: '-', + amount: 0, + wpOut: 0, + circuits: {}, + } + + surface.modules.forEach((module) => { + if (!surfaceObjects[surface.id][module.moduleInfo.itemId]) { + // 지붕면에 모듈 존재 여부 + surfaceObjects[surface.id][module.moduleInfo.itemId] = 0 // 모듈 초기화 + } + + surfaceObjects[surface.id][module.moduleInfo.itemId]++ + surfaceObjects[surface.id].wpOut += +module.moduleInfo.wpOut + if (module.circuit) { + if (!surfaceObjects[surface.id].circuits[module.circuitNumber]) { + surfaceObjects[surface.id].circuits[module.circuitNumber] = { + circuit: module.circuitNumber, + wpOut: 0, + circuits: { wpOut: 0 }, + } + + if (!surfaceObjects[surface.id].circuits[module.circuitNumber].circuits[module.moduleInfo.itemId]) { + surfaceObjects[surface.id].circuits[module.circuitNumber].circuits[module.moduleInfo.itemId] = 0 + } + } + surfaceObjects[surface.id].circuits[module.circuitNumber].circuits[module.moduleInfo.itemId]++ + surfaceObjects[surface.id].circuits[module.circuitNumber].circuits.wpOut += +module.moduleInfo.wpOut + surfaceObjects[surface.id].wpOut -= +module.moduleInfo.wpOut + surfaceObjects[surface.id][module.moduleInfo.itemId]-- + } + }) + }) + console.log('rows', rows) + console.log('surfaceObjects', surfaceObjects) + let tempRows = [] + Object.keys(surfaceObjects).forEach((key) => { + let tempRow = { + name: surfaceObjects[key].roofSurface, + circuit: surfaceObjects[key].circuit, + wpOut: surfaceObjects[key].wpOut, + } + selectedModules.itemList.forEach((module) => { + tempRow[module.itemId] = surfaceObjects[key][module.itemId] + }) + tempRows.push(tempRow) + + Object.keys(surfaceObjects[key].circuits).forEach((circuit) => { + let row = { + name: surfaceObjects[key].roofSurface, + circuit: surfaceObjects[key].circuits[circuit].circuit, + wpOut: surfaceObjects[key].circuits[circuit].circuits.wpOut, + } + selectedModules.itemList.forEach((module) => { + row[module.itemId] = surfaceObjects[key].circuits[circuit].circuits[module.itemId] + }) + tempRows.push(row) + }) + }) + const tempFooter = { + name: '총합', + circuit: '-', + wpOut: tempRows.reduce((acc, row) => acc + row.wpOut, 0), + } + selectedModules.itemList.forEach((module) => { + tempFooter[module.itemId] = tempRows.reduce((acc, row) => acc + row[module.itemId], 0) + }) + console.log('tempHeader, tempRows, tempFooter', tempHeader, tempRows, tempFooter) + setHeader(tempHeader) + setRows(tempRows.filter((row) => row.wpOut !== 0)) + setFooter(tempFooter) + } + + const initSelectedPcsCircuitNumber = () => { + swalFire({ + title: '선택된 파워 컨디셔너의 회로할당을 초기화합니다.', + type: 'confirm', + icon: 'warning', + confirmFn: () => { + const circuitModules = canvas.getObjects().filter((obj) => obj.name === 'module' && obj.circuit?.circuitInfo?.id === selectedPcs.id) + canvas.remove(...circuitModules.map((module) => module.circuit)) + circuitModules.forEach((obj) => { + obj.circuit = null + obj.pcsItemId = null + }) + setTargetModules([]) + + canvas.renderAll() + canvas.discardActiveObject() + }, + }) + } + + const initAllPcsCircuitNumber = () => { + canvas.discardActiveObject() + swalFire({ + title: '회로 할당의 설정을 초기화합니다.', + type: 'confirm', + icon: 'warning', + confirmFn: () => { + const circuitModules = canvas + .getObjects() + .filter((obj) => obj.name === 'module' && selectedModels.map((model) => model.id).includes(obj.circuit?.circuitInfo?.id)) + canvas.remove(...circuitModules.map((module) => module.circuit)) + circuitModules.forEach((obj) => { + obj.circuit = null + obj.pcsItemId = null + }) + setTargetModules([]) + + canvas.renderAll() + }, + }) } return ( @@ -949,7 +457,7 @@ export default function PassivityCircuitAllocation(props) { - {headers.map((header, index) => ( + {header.map((header, index) => ( ))} @@ -957,7 +465,7 @@ export default function PassivityCircuitAllocation(props) { {rows.map((row, index) => ( - {headers.map((header, i) => ( + {header.map((header, i) => ( @@ -965,9 +473,9 @@ export default function PassivityCircuitAllocation(props) { ))} - {footer.map((footer, index) => ( - ))} @@ -990,10 +498,11 @@ export default function PassivityCircuitAllocation(props) { type="radio" name="radio01" id={`ra0${index + 1}`} - checked={selectedPcs === model} + value={model} + checked={selectedPcs?.id === model.id} onChange={() => setSelectedPcs(model)} /> -
{header.name}
{row[header.prop]}
- {footer} + {header.map((header, i) => ( + + {footer[header.prop]}