fo: 총인설비 수질현황 기간별 exceldownload

This commit is contained in:
dongsilove
2026-01-12 22:40:58 +09:00
parent fe216499ec
commit 8f26c1482e
3 changed files with 37 additions and 63 deletions
@@ -35,7 +35,7 @@ export default function FacilityTermModalHeader<T extends { msrDt: string }>({
const [endDate, setEndDate] = useState<Date>(new Date(Number(searchYear), 11, 31));
const startPickerRef = useRef<HTMLDivElement>(null);
const endPickerRef = useRef<HTMLDivElement>(null);
const [flowPanel, setFlowPanel] = useState<string>(selectFlowPanel[0]?.val ?? '0'); // 초기값 "전체"
const [flowPanel, setFlowPanel] = useState<string>(selectFlowPanel[0]?.val ?? '0'); // 강수구분 : 초기값 "전체"
const [copySearchList, setCopySearchList] = useState<T[]>(searchList);
const [standSearchList, setStandSearchList] = useState<T[]>(searchList);
@@ -52,12 +52,10 @@ const tabList3 = [
export default function WaterQualityModal({ fcltyName = '', facilityCd = '', searchYear = new Date().getFullYear().toString() }: ModalProps) {
const [tabName, setTabName] = useState<string>('tab_num1');
// 그리드 관련
const { FacilityWaterQltyModal,
searchFacilityWaterQltyListHist,
Common
} = useFoStore((state) => state);
// 날짜 필터링 관련 상태
const [copyYearList, setCopyYearList] = useState<FacilityWaterQltyProps[]>([]);
const [chongInWaterQltyYearList, setChongInWaterQltyYearList] = useState<FacilityWaterQltyProps[]>([]);
const { FacilityWaterQltyModal, searchFacilityWaterQltyListHist, Common } = useFoStore((state) => state);
const { btnClass, COD_YEAR } = Common;
const {
upHeadListModalYear,
@@ -72,6 +70,16 @@ export default function WaterQualityModal({ fcltyName = '', facilityCd = '', sea
const prevExcelListRef = useRef<modalExcelType[] | null>(null);
const prevChoinginExcelListRef = useRef<modalChoinginExcelType[] | null>(null);
useEffect(() => {
searchFacilityWaterQltyListHist(searchYear, facilityCd);
}, [searchYear, facilityCd, searchFacilityWaterQltyListHist]);
useEffect(() => {
const filteredYearData = setFilterAfterData(facilityWaterQltyYearList);
setCopyYearList(filteredYearData as FacilityWaterQltyProps[]);
setChongInWaterQltyYearList(filteredYearData as FacilityWaterQltyProps[]);
}, [facilityWaterQltyYearList]);
// 필터링 된 후 최대, 최소, 평균 값 계산
const setFilterAfterData = (filteredData: FacilityWaterQltyProps[]) => {
// 쉼표가 포함된 문자열을 숫자로 변환하는 함수
@@ -313,7 +321,7 @@ export default function WaterQualityModal({ fcltyName = '', facilityCd = '', sea
addr: "",
fctCpc: 0,
noProcessInflAmnt: roundNumber(minNoProcessInflAmnt, 0),
infoRnDay: Math.round(minInfoRnDay * 10) / 10 ? '0.0' : roundNumber(minInfoRnDay, 1),
infoRnDay: Math.round(minInfoRnDay * 10) / 10 ? roundNumber(minInfoRnDay, 1) : '0.0',
tpInflWqltBod: Math.round(minTpInflWqltBod * 10) / 10 && minTpInflWqltBod != 99999999 ? roundNumber(minTpInflWqltBod, 1) : '0.0',
tpInflWqltTp: Math.round(minTpInflWqltTp * 1000) / 1000 && minTpInflWqltTp != 99999999 ? roundNumber(minTpInflWqltTp, 3) : '0.000'
},
@@ -323,20 +331,6 @@ export default function WaterQualityModal({ fcltyName = '', facilityCd = '', sea
return newFilteredData;
}
// 날짜 필터링 관련 상태
const [copyYearList, setCopyYearList] = useState<FacilityWaterQltyProps[]>([]);
const [chongInWaterQltyYearList, setChongInWaterQltyYearList] = useState<FacilityWaterQltyProps[]>([]);
useEffect(() => {
searchFacilityWaterQltyListHist(searchYear, facilityCd);
}, [searchYear, facilityCd, searchFacilityWaterQltyListHist]);
useEffect(() => {
const filteredYearData = setFilterAfterData(facilityWaterQltyYearList);
setCopyYearList(filteredYearData as FacilityWaterQltyProps[]);
setChongInWaterQltyYearList(filteredYearData as FacilityWaterQltyProps[]);
}, [facilityWaterQltyYearList]);
const yesterDay = new Date();
yesterDay.setDate(yesterDay.getDate() - 1);
const yesterDayStr = yesterDay.toISOString().split('T')[0];
@@ -350,7 +344,8 @@ export default function WaterQualityModal({ fcltyName = '', facilityCd = '', sea
const filterData = useCallback((returnType: ReturnType<FacilityWaterQltyProps>) => {
const filteredData = setFilterAfterData(returnType.filteredList);
setCopyYearList(filteredData as FacilityWaterQltyProps[]);
setCopyYearList(filteredData as FacilityWaterQltyProps[]); // 처리시설 수질현황
setChongInWaterQltyYearList(filteredData as FacilityWaterQltyProps[]); // 총인설비 수질현황
}, []);
const excelDownload = () => {
@@ -393,6 +388,8 @@ export default function WaterQualityModal({ fcltyName = '', facilityCd = '', sea
const excelDownList: modalChoinginExcelType[] = [];
if (chongInWaterQltyYearList.length > 0) {
chongInWaterQltyYearList.forEach((item) => {
// if (copyYearList.length > 0) {
// copyYearList.forEach((item) => {
excelDownList.push({
날짜: item.msrDt,
"유입BOD(mg/L)": CommaToNumber(item.tpInflWqltBod),
@@ -432,7 +429,7 @@ export default function WaterQualityModal({ fcltyName = '', facilityCd = '', sea
{/* 처리시설 수질현황 */}
<TabsContent value="tab_num1">
<UITab tabList={tabList2} defaultValue="tab_term_year">
<TabsContent value="tab_term_year">
<TabsContent value="tab_term_year">{/* 연간 */}
<FacilityTermModalHeader<FacilityWaterQltyProps>
searchList={facilityWaterQltyYearList}
fcltyCd={facilityCd} fcltyName={fcltyName} tabName="tab_term_year"
@@ -449,9 +446,9 @@ export default function WaterQualityModal({ fcltyName = '', facilityCd = '', sea
<HeadMakeColSpan upHeadList={upHeadListModalYear} layoutNum={3} />
</UiTable>
</div>
<div className="card-header">
<div className="card-header border-t mt-1">
<h3 className="text-2xl font-medium text-label">수질 TMS</h3>
{/*<h3 className="text-2xl font-medium text-label text-right">({msrmtDate?msrmtDate.substring(0,4)+'-'+msrmtDate.substring(4,6)+'-'+msrmtDate.substring(6,8):yesterDayStr})</h3> */}
<h3 className="text-2xl font-medium text-label text-right">({msrmtDate ? msrmtDate.substring(0, 4) + '-' + msrmtDate.substring(4, 6) + '-' + msrmtDate.substring(6, 8) : yesterDayStr})</h3>
</div>
<div className="overflow-y-auto h-[250px]">
<UiTable
@@ -507,7 +504,7 @@ export default function WaterQualityModal({ fcltyName = '', facilityCd = '', sea
</div>
</TabsContent>
<TabsContent value="tab_term_chuncheon">{/* 청천 */}
<TabsContent value="tab_term_chuncheon">{/* 청천시 */}
<FacilityTermModalHeader<FacilityWaterQltyProps>
searchList={facilityWaterQltyYearList}
fcltyCd={facilityCd} fcltyName={fcltyName} tabName="tab_term_chuncheon"
@@ -552,7 +549,7 @@ export default function WaterQualityModal({ fcltyName = '', facilityCd = '', sea
{/* 총인설비 수질현황 */}
<TabsContent value="tab_num2" >
<UITab tabList={tabList3} defaultValue="tab_term_year_chongin">
<TabsContent value="tab_term_year_chongin">
<TabsContent value="tab_term_year_chongin">{/* 연간 */}
<FacilityTermModalHeader<FacilityWaterQltyProps>
searchList={chongInWaterQltyYearList}
fcltyCd={facilityCd} fcltyName={fcltyName} tabName="tab_term_year"
@@ -571,7 +568,7 @@ export default function WaterQualityModal({ fcltyName = '', facilityCd = '', sea
</div>
</TabsContent>
<TabsContent value="tab_term_summer_chongin">
<TabsContent value="tab_term_summer_chongin">{/* 하절기 */}
<FacilityTermModalHeader<FacilityWaterQltyProps>
searchList={chongInWaterQltyYearList}
fcltyCd={facilityCd} fcltyName={fcltyName} tabName="tab_term_summer"
@@ -590,7 +587,7 @@ export default function WaterQualityModal({ fcltyName = '', facilityCd = '', sea
</div>
</TabsContent>
<TabsContent value="tab_term_winter_chongin">
<TabsContent value="tab_term_winter_chongin">{/* 동절기 */}
<FacilityTermModalHeader<FacilityWaterQltyProps>
searchList={chongInWaterQltyYearList}
fcltyCd={facilityCd} fcltyName={fcltyName} tabName="tab_term_winter"
+10 -33
View File
@@ -2,7 +2,7 @@
import DataForm, { roundNumber } from "@/app/components/common/DataForm";
import type { TableUpperProps } from "../dashboard";
import CalcRainEffect from "@/app/components/common/CalcRainEffect";
import { COD_YEAR } from "../common";
import { COD_YEAR } from "../common"; // 2021년
import CommaToNumber from "@/app/components/common/CommaToNumber";
export type { TableUpperProps };
@@ -431,7 +431,7 @@ const dataFormSetting = (item: FacilityWaterQltyProps) => {
}
export type FacilityWaterQltyStore = FacilityWaterQltyType & FacilityWaterQltyActions;
// 타입 정의를 분리하여 가독성 향상
type SetFunc = (fn: (state: FacilityWaterQltyType) => FacilityWaterQltyType) => void;
export const facilityWaterQltyReducer = (set: SetFunc): FacilityWaterQltyActions => {
return {
@@ -447,7 +447,9 @@ export const facilityWaterQltyReducer = (set: SetFunc): FacilityWaterQltyActions
* @param operationValue : 운영상태코드
* @param fcltyNm : 시설명
*/
searchFacilityWaterQltyList: async (pageNo: number, pageSize: number, searchYear: string, part?: string, nameCd?: string, fcltCpct?: string, operationValue?: string, fcltyNm?: string) => {
searchFacilityWaterQltyList: async (pageNo: number, pageSize: number, searchYear: string, part?: string
, nameCd?: string, fcltCpct?: string, operationValue?: string, fcltyNm?: string) => {
set((state: FacilityWaterQltyType) => ({
...state,
FacilityWaterQltyMain: {
@@ -567,7 +569,6 @@ export const facilityWaterQltyReducer = (set: SetFunc): FacilityWaterQltyActions
tn: res1.data.tnAvgVl,
tp: res1.data.tpAvgVl,
});
rtnTmsList.push({
part: '최대',
toc: res1.data.tocMaxVl,
@@ -575,7 +576,6 @@ export const facilityWaterQltyReducer = (set: SetFunc): FacilityWaterQltyActions
tn: res1.data.tnMaxVl,
tp: res1.data.tpMaxVl,
});
rtnTmsList.push({
part: '최소',
toc: res1.data.tocMinVl,
@@ -586,30 +586,9 @@ export const facilityWaterQltyReducer = (set: SetFunc): FacilityWaterQltyActions
rtnMsrmtDate = res1.data.msrmtDate;
} else {
rtnTmsList.push({
part: '평균',
toc: 0,
ss: 0,
tn: 0,
tp: 0,
});
rtnTmsList.push({
part: '최대',
toc: 0,
ss: 0,
tn: 0,
tp: 0,
});
rtnTmsList.push({
part: '최소',
toc: 0,
ss: 0,
tn: 0,
tp: 0,
});
rtnTmsList.push({ part: '평균', toc: 0, ss: 0, tn: 0, tp: 0, });
rtnTmsList.push({ part: '최대', toc: 0, ss: 0, tn: 0, tp: 0, });
rtnTmsList.push({ part: '최소', toc: 0, ss: 0, tn: 0, tp: 0, });
rtnMsrmtDate = '';
}
@@ -633,10 +612,8 @@ export const facilityWaterQltyReducer = (set: SetFunc): FacilityWaterQltyActions
* [(강우시 일별유입유량*강우시 일별유입BOD)-(청천시 연평균유입유량*청천시 연평균유입BOD)]​
/강우시 일별유입BOD)
*/
//let rainInflAmnt = 0;
let sunnyInflAmnt = 0;
let sunnyBod = 0;
//let rainDay = 0;
let sunnyDay = 0;
data.forEach(item => {
@@ -700,12 +677,12 @@ export const facilityWaterQltyReducer = (set: SetFunc): FacilityWaterQltyActions
item.efflWqltToc = Number(Math.round(Number(item.efflWqltToc) * 10) / 10).toFixed(1);
}
if (item.tpInflWqltBod) {
if (item.tpInflWqltBod) { // 총인 유입수질 BOD(mg/L)
item.tpInflWqltBod = item.tpInflWqltBod ? Number(Math.round(Number(item.tpInflWqltBod) * 10) / 10).toFixed(1) : Number(item.tpInflWqltBod) === 0 ? '0.0' : '';
} else {
item.tpInflWqltBod = '';
}
if (item.tpInflWqltTp) {
if (item.tpInflWqltTp) { // 총인 유입수질 TP(mg/L)
item.tpInflWqltTp = item.tpInflWqltTp ? Number(Math.round(Number(item.tpInflWqltTp) * 1000) / 1000).toFixed(3) : Number(item.tpInflWqltTp) === 0 ? '0.000' : '';
} else {
item.tpInflWqltTp = '';