Merge pull request 'dev' (#952) from dev into dev-deploy
Reviewed-on: #952
This commit is contained in:
commit
9639c88e09
@ -685,6 +685,18 @@ export default function CircuitTrestleSetting({ id }) {
|
|||||||
|
|
||||||
// 회로할당(승압설정) 저장 버튼 클릭 시
|
// 회로할당(승압설정) 저장 버튼 클릭 시
|
||||||
const onApply = async () => {
|
const onApply = async () => {
|
||||||
|
// [NOT-ALLOC-GUARD 2026-07-03] 회로 미할당 모듈이 있으면 캡처(capture) 전에 차단.
|
||||||
|
// apply() 는 검증+가대설치가 묶여 있어 캡처 뒤에 실행되므로, 여기서 먼저 막지 않으면 이미지가 먼저 생성된다.
|
||||||
|
const notAllocationModules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE && !obj.circuit)
|
||||||
|
if (notAllocationModules.length > 0) {
|
||||||
|
swalFire({
|
||||||
|
text: getMessage('not.allocation.exist.module'),
|
||||||
|
type: 'alert',
|
||||||
|
icon: 'warning',
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
setAllModuleSurfaceIsComplete(false)
|
setAllModuleSurfaceIsComplete(false)
|
||||||
|
|
||||||
setIsGlobalLoading(true)
|
setIsGlobalLoading(true)
|
||||||
|
|||||||
@ -388,7 +388,8 @@ export const useEstimateController = (planNo, flag) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 견적 상세 저장 후 저장된 plan JSON 에서 회로 payload 를 만들어 CONN_VOL_W(접속용량) 백필을 요청한다.
|
// 견적 저장 직후 CONN_VOL_W(접속용량) 백필 → 인증용량 = Σ min(CONN_VOL_W_unit, PCS정격_unit) 계산용.
|
||||||
|
// 견적서 상세 화면엔 라이브 캔버스가 없으므로, 서버에 저장된 plan JSON(by-object)을 받아 파싱한다.
|
||||||
const backfillConnVol = async (objectNo, planNo) => {
|
const backfillConnVol = async (objectNo, planNo) => {
|
||||||
try {
|
try {
|
||||||
const list = await get({ url: `/api/canvas-management/canvas-statuses/by-object/${objectNo}` })
|
const list = await get({ url: `/api/canvas-management/canvas-statuses/by-object/${objectNo}` })
|
||||||
@ -398,21 +399,28 @@ export const useEstimateController = (planNo, flag) => {
|
|||||||
|
|
||||||
const moduleObjs = objects.filter((o) => o.name === POLYGON_TYPE.MODULE)
|
const moduleObjs = objects.filter((o) => o.name === POLYGON_TYPE.MODULE)
|
||||||
const moduleList = moduleObjs.map((m) => ({ circuit: m.circuitNumber, specification: m.moduleInfo?.wpOut }))
|
const moduleList = moduleObjs.map((m) => ({ circuit: m.circuitNumber, specification: m.moduleInfo?.wpOut }))
|
||||||
if (moduleList.length === 0) return
|
|
||||||
|
|
||||||
// PCS 유닛 번호 = circuit 첫 숫자. distinct 개수 = 유닛 수, 오름차순 = 유닛 index
|
|
||||||
const unitNumbers = [...new Set(moduleObjs.map((m) => parseInt(String(m.circuitNumber ?? '').match(/\d+/)?.[0], 10)).filter((n) => n > 0))].sort(
|
|
||||||
(a, b) => a - b
|
|
||||||
)
|
|
||||||
// PCS 데이터는 surfaces[0] 에만 실려 있다.
|
// PCS 데이터는 surfaces[0] 에만 실려 있다.
|
||||||
|
// circuitItemList 개수 = 실제 PCS 대수(빈 {} 금지). 라벨 첫 숫자로 유닛 수를 세면
|
||||||
|
// 단일 PCS+회로 여러 개일 때 pcsList[unit-1] 이 undefined → 빈 {} 가 생겨 서버가 정격을 못 찾아 회로가 탈락한다.
|
||||||
const surface0 = objects.find((o) => o.name === POLYGON_TYPE.MODULE_SETUP_SURFACE)
|
const surface0 = objects.find((o) => o.name === POLYGON_TYPE.MODULE_SETUP_SURFACE)
|
||||||
const pcsList = (surface0?.pcses || []).filter((pcs) => pcs?.pcsItemId)
|
const pcsList = (surface0?.pcses || []).filter((pcs) => pcs?.pcsItemId)
|
||||||
const circuitItemList = unitNumbers.map((unit) => ({ itemId: pcsList[unit - 1]?.pcsItemId }))
|
const circuitItemList = pcsList.map((pcs) => ({ itemId: pcs.pcsItemId }))
|
||||||
|
|
||||||
await promisePost({
|
logger.log('[UPDATE-CONN-VOL] enter', {
|
||||||
url: `${ESTIMATE_API_ENDPOINT}/update-conn-vol`,
|
planCount: (list || []).length,
|
||||||
data: { objectNo, planNo, circuitItemList, roofSurfaceList: [{ moduleList }] },
|
moduleCount: moduleObjs.length,
|
||||||
|
pcsCount: pcsList.length,
|
||||||
|
objectNo,
|
||||||
|
planNo,
|
||||||
})
|
})
|
||||||
|
if (moduleList.length === 0) {
|
||||||
|
logger.log('[UPDATE-CONN-VOL] skip — plan JSON 에 모듈 없음')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const connVolData = { objectNo, planNo, circuitItemList, roofSurfaceList: [{ moduleList }] }
|
||||||
|
logger.log('[UPDATE-CONN-VOL] payload', JSON.stringify(connVolData))
|
||||||
|
await promisePost({ url: `${ESTIMATE_API_ENDPOINT}/update-conn-vol`, data: connVolData })
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logger.log('[UPDATE-CONN-VOL] 백필 호출 실패', e?.message)
|
logger.log('[UPDATE-CONN-VOL] 백필 호출 실패', e?.message)
|
||||||
}
|
}
|
||||||
@ -484,9 +492,10 @@ export const useEstimateController = (planNo, flag) => {
|
|||||||
try {
|
try {
|
||||||
setIsGlobalLoading(true)
|
setIsGlobalLoading(true)
|
||||||
await promisePost({ url: `${ESTIMATE_API_ENDPOINT}/save-estimate`, data: estimateData }).then(async (res) => {
|
await promisePost({ url: `${ESTIMATE_API_ENDPOINT}/save-estimate`, data: estimateData }).then(async (res) => {
|
||||||
|
logger.log('[UPDATE-CONN-VOL] save-estimate 응답', res.status)
|
||||||
if (res.status === 201) {
|
if (res.status === 201) {
|
||||||
estimateData.newFileList = []
|
estimateData.newFileList = []
|
||||||
// 인증용량이 CONN_VOL_W 로 계산되므로, /detail 재조회(fetchSetting) 전에 백필을 먼저 끝낸다.
|
// 인증용량이 CONN_VOL_W 로 계산되므로 /detail 재조회(fetchSetting) 전에 백필을 끝낸다.
|
||||||
await backfillConnVol(estimateData.objectNo, estimateData.planNo)
|
await backfillConnVol(estimateData.objectNo, estimateData.planNo)
|
||||||
swalFire({ text: getMessage('estimate.detail.save.alertMsg'), type: 'alert' })
|
swalFire({ text: getMessage('estimate.detail.save.alertMsg'), type: 'alert' })
|
||||||
fetchSetting(estimateData.objectNo, estimateData.planNo)
|
fetchSetting(estimateData.objectNo, estimateData.planNo)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user