수동 할당 집계표 수정

This commit is contained in:
Minsiki 2025-01-30 18:02:56 +09:00
parent fa57be3c29
commit 4ddd1f7fb1
4 changed files with 139 additions and 38 deletions

View File

@ -18,6 +18,7 @@ import { canvasState } from '@/store/canvasAtom'
import { useTrestle } from '@/hooks/module/useTrestle' import { useTrestle } from '@/hooks/module/useTrestle'
import { selectedModuleState } from '@/store/selectedModuleOptions' import { selectedModuleState } from '@/store/selectedModuleOptions'
import { v4 as uuidv4 } from 'uuid'
const ALLOCATION_TYPE = { const ALLOCATION_TYPE = {
AUTO: 'auto', AUTO: 'auto',
@ -76,7 +77,14 @@ export default function CircuitTrestleSetting({ id }) {
getPcsAutoRecommendList(params).then((res) => { getPcsAutoRecommendList(params).then((res) => {
if (res.data?.pcsItemList) { if (res.data?.pcsItemList) {
setModels(res.data.pcsItemList) setModels(
res.data.pcsItemList.map((model) => {
return {
...model,
id: uuidv4(),
}
}),
)
setTabNum(2) setTabNum(2)
} else { } else {
swalFire({ swalFire({
@ -190,11 +198,33 @@ export default function CircuitTrestleSetting({ id }) {
const onPassivityAllocation = () => { const onPassivityAllocation = () => {
if (selectedModels.length === 0) { if (selectedModels.length === 0) {
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({ swalFire({
title: '파워 컨디셔너를 추가해 주세요.', title: '파워컨디셔너를 추가해 주세요.',
type: 'alert', type: 'alert',
}) })
return }
})
} else if (pcsCheck.max) { } else if (pcsCheck.max) {
const moduleStdQty = selectedModels.reduce((acc, model) => { const moduleStdQty = selectedModels.reduce((acc, model) => {
return acc + parseInt(model.moduleStdQty) return acc + parseInt(model.moduleStdQty)

View File

@ -64,6 +64,7 @@ export default function PowerConditionalSelect(props) {
useEffect(() => { useEffect(() => {
if (makers.length === 0) { if (makers.length === 0) {
getPcsMakerList().then((res) => { getPcsMakerList().then((res) => {
console.log('getPcsMakerList', res.data)
setMakers(res.data) setMakers(res.data)
}) })
} }
@ -90,6 +91,7 @@ export default function PowerConditionalSelect(props) {
} }
const onCheckSeries = (data) => { const onCheckSeries = (data) => {
console.log('data', data)
const copySeries = series.map((s) => { const copySeries = series.map((s) => {
return { return {
...s, ...s,
@ -97,12 +99,19 @@ export default function PowerConditionalSelect(props) {
} }
}) })
setSeries(copySeries) setSeries(copySeries)
console.log('copySeries', copySeries)
handleSetmodels(copySeries.filter((s) => s.selected)) handleSetmodels(copySeries.filter((s) => s.selected))
} }
const handleSetmodels = (series) => { const handleSetmodels = (selectedSeries) => {
const pcsMkrCd = series[0]?.pcsMkrCd console.log('series', selectedSeries)
const pcsSerList = series.map((series) => { if (selectedSeries.length === 0) {
setModels([])
setSelectedModels([])
return
}
const pcsMkrCd = selectedSeries[0]?.pcsMkrCd
const pcsSerList = selectedSeries.map((series) => {
return { pcsSerCd: series.pcsSerCd } return { pcsSerCd: series.pcsSerCd }
}) })
const moduleItemList = selectedModules.itemList?.map((module) => { const moduleItemList = selectedModules.itemList?.map((module) => {
@ -123,11 +132,10 @@ export default function PowerConditionalSelect(props) {
} }
}), }),
) )
return } else {
}
setModels([]) setModels([])
setSelectedModels([]) setSelectedModels([])
}
}) })
} }
@ -151,10 +159,11 @@ export default function PowerConditionalSelect(props) {
const onChangeMaker = (option) => { const onChangeMaker = (option) => {
if (option) { if (option) {
setModels(null) setModels([])
setSelectedMaker(option) setSelectedMaker(option)
getPcsMakerList(option).then((res) => { getPcsMakerList(option).then((res) => {
console.log('getPcsMakerList(series)', res.data)
setSeries( setSeries(
res.data.map((series) => { res.data.map((series) => {
return { ...series, selected: false } return { ...series, selected: false }

View File

@ -10,10 +10,6 @@ import { useContext, useEffect, useState } from 'react'
import { useRecoilValue } from 'recoil' import { useRecoilValue } from 'recoil'
export default function PassivityCircuitAllocation(props) { export default function PassivityCircuitAllocation(props) {
// getOptYn,
// getUseModuleItemList,
// getSelectModelList,
// getRoofSurfaceList,
const { const {
tabNum, tabNum,
setTabNum, setTabNum,
@ -42,6 +38,7 @@ export default function PassivityCircuitAllocation(props) {
useEffect(() => { useEffect(() => {
console.log('header, rows', header, rows) console.log('header, rows', header, rows)
console.log('selectedModels', selectedModels)
// setSurfaceInfo() // setSurfaceInfo()
setTableData() setTableData()
if (!managementState) { if (!managementState) {
@ -238,7 +235,7 @@ export default function PassivityCircuitAllocation(props) {
return { return {
roofSurfaceId: surface.id, roofSurfaceId: surface.id,
roofSurface: surface.direction, roofSurface: surface.direction,
roofSurfaceIncl: surface.incl, roofSurfaceIncl: canvas.getObjects().filter((obj) => obj.id === surface.parentId)[0].pitch,
moduleList: surface.modules.map((module) => { moduleList: surface.modules.map((module) => {
return { return {
itemId: module.moduleInfo.itemId, itemId: module.moduleInfo.itemId,
@ -300,6 +297,7 @@ export default function PassivityCircuitAllocation(props) {
setTargetModules([]) setTargetModules([])
setCircuitNumber(+circuitNumber + 1) setCircuitNumber(+circuitNumber + 1)
setTableData()
}) })
} }
@ -323,21 +321,85 @@ export default function PassivityCircuitAllocation(props) {
}), }),
{ name: '발전량(kW)', prop: 'wpOut' }, { name: '발전량(kW)', prop: 'wpOut' },
] ]
const tempRows = rows.map((row) => {
return { const surfaces = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE)
name: '', const surfaceIds = surfaces.map((surface) => surface.parentId)
circuit: '', const surfaceObjects = {}
...selectedModules.itemList.map((module) => { const rows = surfaces.map((surface) => {
return { const moduleObject = {}
name: module.itemNm, surfaceObjects[surface.id] = {
prop: module.itemId, roofSurface: canvas.getObjects().filter((obj) => obj.id === surface.parentId)[0].directionText,
} circuit: '-',
}), amount: 0,
wpOut: 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)
console.log('tempHeader', tempHeader) 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 = () => { const initSelectedPcsCircuitNumber = () => {
@ -411,9 +473,9 @@ export default function PassivityCircuitAllocation(props) {
</tr> </tr>
))} ))}
<tr> <tr>
{footer.map((footer, index) => ( {header.map((header, i) => (
<td className="al-c" key={'footer' + index}> <td className="al-c" key={'footer' + i}>
{footer} {footer[header.prop]}
</td> </td>
))} ))}
</tr> </tr>
@ -437,7 +499,7 @@ export default function PassivityCircuitAllocation(props) {
name="radio01" name="radio01"
id={`ra0${index + 1}`} id={`ra0${index + 1}`}
value={model} value={model}
checked={selectedPcs.id === model.id} checked={selectedPcs?.id === model.id}
onChange={() => setSelectedPcs(model)} onChange={() => setSelectedPcs(model)}
/> />
<label htmlFor={`ra0${index + 1}`}> <label htmlFor={`ra0${index + 1}`}>
@ -475,7 +537,7 @@ export default function PassivityCircuitAllocation(props) {
<div className="input-grid mr5" style={{ width: '70px' }}> <div className="input-grid mr5" style={{ width: '70px' }}>
<input <input
type="text" type="text"
className="input-origin block" className="block input-origin"
value={circuitNumber} value={circuitNumber}
min={1} min={1}
max={99} max={99}

View File

@ -147,7 +147,7 @@ export function useMasterController() {
], ],
} }
return await post({ url: '/api/v1/master/getPcsSeriesItemList', data: test }).then((res) => { return await post({ url: '/api/v1/master/getPcsSeriesItemList', data: params }).then((res) => {
return res return res
}) })
} }