feat: 침입수 분석 오수관망도 inp 파일이 마인드원 DB에 저장되도록 수정

This commit is contained in:
swcho
2025-08-26 09:59:10 +09:00
parent 26f227e85f
commit 1ac7c97041
2 changed files with 36 additions and 43 deletions
@@ -1,5 +1,5 @@
'use client'
import { postData , postMutiPart} from '@/components/lib/api'
import { postData, postMutiPart } from '@/components/lib/api'
import FileUploadForm from '@/components/ui/fileUploadForm'
import FormSection from '@/components/ui/formSection'
import { DateMonthPicker, filePicked, downloadExcel } from '@common/business_components/ui'
@@ -52,11 +52,19 @@ const IrSetting = () => {
const [sggCd, setSggCd] = useState<string>('0'); // 시군구 코드 상태
const [sggName, setSggName] = useState<string>(''); // 시군구 이름 상태
const [swtrmtFcltNm, setSwtrmtFcltNm] = useState<string>(''); // 하수처리시설명 상태
const [file, setFile] = useState(null);
const handleFileChange = (e: any) => {
setFile(e.target.files[0]);
};
const [uploadedFilesData, setUploadedFilesData] = useState<UploadedFileInfo[]>([
initialFileInfo, // 0: 오수관망도
initialFileInfo, // 1: 수용가-맨홀 매칭결과
initialFileInfo, // 2: 오수량 시간패턴
initialFileInfo // 3: 유량자료 등록
]);
// selectedDate를 yyyyMM 문자열 형식으로 변경
const [selectedDate, setSelectedDate] = useState(() => {
const now = new Date();
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0');
return `${year}${month}`;
});
const { data: userInfo } = useQuery({
queryKey: [ENDPOINT.USER_SERVICE.USERS],
@@ -77,21 +85,6 @@ const IrSetting = () => {
}
})
const [uploadedFilesData, setUploadedFilesData] = useState<UploadedFileInfo[]>([
initialFileInfo, // 0: 오수관망도
initialFileInfo, // 1: 수용가-맨홀 매칭결과
initialFileInfo, // 2: 오수량 시간패턴
initialFileInfo // 3: 유량자료 등록
]);
// selectedDate를 yyyyMM 문자열 형식으로 변경
const [selectedDate, setSelectedDate] = useState(() => {
const now = new Date();
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0');
return `${year}${month}`;
});
// 폼 초기화 함수
const resetAllForms = () => {
form.reset({ // react-hook-form 초기화
@@ -126,7 +119,7 @@ const IrSetting = () => {
index: number, // FileUploadForm의 fileIdx 값
selectedFile: File | null,
cd: string | null,
id: string | null
id: string | null,
) => {
setUploadedFilesData(prevData => {
const newData = [...prevData];
@@ -144,17 +137,7 @@ const IrSetting = () => {
const registFile = async (analysisData: any) => {
setIsLoadingResult(true); // 로딩 상태 시작
console.log("Submitting combined analysis data to backend:", analysisData);
// 추후 API 엔드포인트에 맞게 URL 수정 필요
// const data = await postData('v1/inftwtAnls', analysisData);
const jsonBlob = new Blob([JSON.stringify(analysisData)], {
type: 'application/json'
});
const formData = new FormData();
formData.append('data', jsonBlob);
if (file) {
formData.append('inpFile', file);
}
const data = await postMutiPart('v1/inftwtAnls/savewithfile', formData);
const data = await postMutiPart('v1/inftwtAnls/savewithfile', analysisData);
console.log("Response from backend:", data);
if (data) {
setIsLoadingResult(false); // 로딩 상태 시작
@@ -323,7 +306,7 @@ const IrSetting = () => {
: null;
// 새로운 JSON 데이터 생성
const combinedAnalysisData = {
const jsonData = {
ctpvCd: ctpvCd !== '0' ? String(ctpvCd).trim() : null,
sggCd: sggCd !== '0' ? String(sggCd) : null, // 시군구코드 (선택값)
swtrmtFcltNm: swtrmtFcltNm ?? null,
@@ -344,7 +327,16 @@ const IrSetting = () => {
tbSnRcptrInfo: rcptrInfoData, // 수용가 상수사용량 (없을 수 있음)
};
console.log("통합 분석 데이터 (JSON):", combinedAnalysisData);
const jsonBlob = new Blob([JSON.stringify(jsonData)], {
type: 'application/json'
});
const combinedAnalysisData = new FormData();
combinedAnalysisData.append('data', jsonBlob);
if (file1?.file) {
combinedAnalysisData.append('inpFile', file1.file);
}
console.log("통합 분석 데이터 (JSON):", jsonData);
// 수정된 registFile 함수를 호출하여 combinedAnalysisData를 전송합니다.
await registFile(combinedAnalysisData);
@@ -412,7 +404,7 @@ const IrSetting = () => {
showPreview={true}
accept={".inp"}
fileIdx={0} />
</FormSection><input type="file" onChange={handleFileChange} />
</FormSection>
<FormSection name='suyeonga' form={form} titleNm='▷ 수용가-맨홀 매칭결과' required={true}>
<div className="flex items-center">
<FileUploadForm
+8 -7
View File
@@ -87,19 +87,20 @@ const FileUploadForm = ({
if (!firstFile) return; // 타입스크립트 undefined 가능성 제거
setFiles(selectedFiles);
setFileName(firstFile.name);
setCurrentFile(firstFile);
if (onFileSelect) {
onFileSelect(firstFile, internalAtflCd, internalAtflId);
}
handleUpload(selectedFiles, {
handleUploadStart: setUpload,
handleSuccess: setUpload,
// handleResponse는 tus-js-client의 Upload 인스턴스 콜백과 연동 필요
// 여기서는 handleUpload 유틸리티가 응답을 직접 처리한다고 가정
handleResponse: internalHandleUploadResponse(firstFile),
});
// handleUpload(selectedFiles, {
// handleUploadStart: setUpload,
// handleSuccess: setUpload,
// // handleResponse는 tus-js-client의 Upload 인스턴스 콜백과 연동 필요
// // 여기서는 handleUpload 유틸리티가 응답을 직접 처리한다고 가정
// handleResponse: internalHandleUploadResponse(firstFile),
// });
}}
customPreview={
showPreview ? (