From c8d2c4e17ed3b3f42ac32860f8851e5f1e472387 Mon Sep 17 00:00:00 2001 From: jsyang Date: Thu, 24 Jul 2025 10:17:58 -0400 Subject: [PATCH] =?UTF-8?q?=EC=A1=B0=EC=B9=98=20=EC=A7=84=ED=96=89=20?= =?UTF-8?q?=EC=A4=91,=20pnpm=20build=20any=EC=A0=9C=EC=99=B8=20=EC=9E=91?= =?UTF-8?q?=EC=97=85=EC=A7=84=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/pages/dashboard/facilityInfo/page.tsx | 2 +- apps/fo/app/pages/sewageOccur/modal/page.tsx | 75 +++---- apps/fo/app/pages/sewageOccur/page.tsx | 2 - apps/fo/app/store/flowRate/index.tsx | 1 - apps/fo/app/store/sewageOccur/index.tsx | 207 ++---------------- apps/fo/eslint.config.mjs | 4 + .../fo/src/entities/auth/lib/token-manager.ts | 2 +- 7 files changed, 50 insertions(+), 243 deletions(-) diff --git a/apps/fo/app/pages/dashboard/facilityInfo/page.tsx b/apps/fo/app/pages/dashboard/facilityInfo/page.tsx index ddda9c9c0..767ed54e4 100644 --- a/apps/fo/app/pages/dashboard/facilityInfo/page.tsx +++ b/apps/fo/app/pages/dashboard/facilityInfo/page.tsx @@ -2,7 +2,7 @@ import { useFoStore } from "@/app/store"; import type { TableUpperProps } from "@/app/store/processFacility"; import { ContentsDiv, UiModal, UiTable } from "@common/business_components"; -import { cn, Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@common/components"; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@common/components"; import { useEffect, useState } from "react"; import DashBoardChartModal from "./modal/page"; diff --git a/apps/fo/app/pages/sewageOccur/modal/page.tsx b/apps/fo/app/pages/sewageOccur/modal/page.tsx index 824871432..b776ff7ef 100644 --- a/apps/fo/app/pages/sewageOccur/modal/page.tsx +++ b/apps/fo/app/pages/sewageOccur/modal/page.tsx @@ -1,11 +1,11 @@ "use client" import { useFoStore } from "@/app/store"; -import type { SewageOccurDetailProps } from "@/app/store/sewageOccur"; import { DateMonthPicker, UiTable } from "@common/business_components/ui"; import ListDiv from "@common/business_components/ui/list_div"; import { Table, TableCell, TableHead, TableRow } from "@common/components/ui"; import { useEffect, useState } from "react"; +type tableType = { msrDt: string,waterUsage: number,swageChangePercent: number,estimationSewage: number}; export default function SewageOccurModal(props: { fcltyName: string; facilityCd : string; searchYear : string}) { // 그리드 관련 const {SewageOccurDetail, searchSewageOccurDetailList} = useFoStore((state) => state); @@ -15,7 +15,7 @@ export default function SewageOccurModal(props: { fcltyName: string; facilityCd const [startYearMonth, setStartYearMonth] = useState(validSearchYear+'01'); const [endYearMonth, setEndYearMonth] = useState(validSearchYear+'12'); - const [detailList, setDetailList] = useState([]); + const [detailList, setDetailList] = useState([]); const { upHeadListSewageOccurDetail, gridListSewageOccurDetail @@ -26,76 +26,51 @@ export default function SewageOccurModal(props: { fcltyName: string; facilityCd }, [searchSewageOccurDetailList, props.facilityCd, validSearchYear]); useEffect(() => { - const filteredList = gridListSewageOccurDetail.filter(item => item.msrDt.replace(/-/g, '') >= startYearMonth && item.msrDt.replace(/-/g, '') <= endYearMonth); let maxWaterUsage = 0; - let maxSwageChangePercent = 0; - let maxEstimationSewage = 0; - - let minWaterUsage = filteredList[0]?.waterUsage || 0; - let minSwageChangePercent = filteredList[0]?.swageChangePercent || 0; - let minEstimationSewage = filteredList[0]?.estimationSewage || 0; - + let minWaterUsage = 9999999999; let totalWaterUsage = 0; - let totalSwageChangePercent = 0; - let totalEstimationSewage = 0; - let avgWaterUsage = 0; - let avgSwageChangePercent = 0; - let avgEstimationSewage = 0; - - filteredList.forEach(item => { - if (item.waterUsage > maxWaterUsage) { - maxWaterUsage = item.waterUsage; - } - if (item.swageChangePercent > maxSwageChangePercent) { - maxSwageChangePercent = item.swageChangePercent; - } - if (item.estimationSewage > maxEstimationSewage) { - maxEstimationSewage = item.estimationSewage; + const tableData:tableType[] = [] + gridListSewageOccurDetail.forEach((item, index) => { + tableData.push({ + msrDt: item.yr+'-'+(index+1>10?String(index+1):'0'+(index+1)), + waterUsage: Math.round(item.usege * 100) / 100, + swageChangePercent: Math.round((item.usege/item.usege*0.8) * 100) / 100, + estimationSewage: Math.round(item.usege*0.8 * 100) / 100 + }) + if (item.usege > maxWaterUsage) { + maxWaterUsage = item.usege; } - if (item.waterUsage < minWaterUsage) { - minWaterUsage = item.waterUsage; + if (item.usege < minWaterUsage) { + minWaterUsage = item.usege; } - if (item.swageChangePercent < minSwageChangePercent) { - minSwageChangePercent = item.swageChangePercent; - } - if (item.estimationSewage < minEstimationSewage) { - minEstimationSewage = item.estimationSewage; - } - totalWaterUsage += item.waterUsage; - totalSwageChangePercent += item.swageChangePercent; - totalEstimationSewage += item.estimationSewage; + totalWaterUsage += item.usege; }); - avgWaterUsage = totalWaterUsage?totalWaterUsage / filteredList.length:0; - console.log("totalWaterUsage", totalWaterUsage); - console.log("filteredList.length", filteredList.length); - console.log("avgWaterUsage", avgWaterUsage); - avgSwageChangePercent = totalSwageChangePercent?totalSwageChangePercent / filteredList.length:0; - avgEstimationSewage = totalEstimationSewage?totalEstimationSewage / filteredList.length:0; + avgWaterUsage = totalWaterUsage?totalWaterUsage / gridListSewageOccurDetail.length:0; - const newData = [ + const newData= [ { msrDt: '평균', waterUsage: Math.round(avgWaterUsage * 100) / 100, - swageChangePercent: Math.round(avgSwageChangePercent * 100) / 100, - estimationSewage: Math.round(avgEstimationSewage * 100) / 100 + swageChangePercent: Math.round((avgWaterUsage/avgWaterUsage*0.8) * 100) / 100, + estimationSewage: Math.round(avgWaterUsage*0.8 * 100) / 100 }, { msrDt: '최대', waterUsage: maxWaterUsage, - swageChangePercent: maxSwageChangePercent, - estimationSewage: maxEstimationSewage + swageChangePercent: Math.round((maxWaterUsage/maxWaterUsage*0.8) * 100) / 100, + estimationSewage: Math.round(maxWaterUsage*0.8 * 100) / 100 }, { msrDt: '최소', waterUsage: minWaterUsage, - swageChangePercent: minSwageChangePercent, - estimationSewage: minEstimationSewage + swageChangePercent: Math.round((minWaterUsage/minWaterUsage*0.8) * 100) / 100, + estimationSewage: Math.round(minWaterUsage*0.8 * 100) / 100 }, - ...filteredList + ...tableData ] setDetailList(newData); diff --git a/apps/fo/app/pages/sewageOccur/page.tsx b/apps/fo/app/pages/sewageOccur/page.tsx index af59c633e..68a8f6ed3 100644 --- a/apps/fo/app/pages/sewageOccur/page.tsx +++ b/apps/fo/app/pages/sewageOccur/page.tsx @@ -13,7 +13,6 @@ export default function PlanSewage() { ,SewageOccurSearch ,initializeCommonData ,searchSewageOccurList - ,calculateModalDataForAllFacilities } = useFoStore((state) => state) || { Common: { isInit: false, selectUpdownData: [], selectOperationData: [], selectSidoData: [], selectSigunData: [], selectRegionData: [], selectUnitWaterShedData: [], selectMiddleRegionData: [], selectEnvPartData: [], selectSearchYear: [{ val: "0" }], btnClass: "" }, SewageOccur: { sewageOccurList: [], sewageOccurCount: 0, excelList: [], upHeadList1: [], upHeadList2: [], upHeadList3: [] }, @@ -68,7 +67,6 @@ export default function PlanSewage() { const [selectedRow, setSelectedRow] = useState(null); const [fcltyNm, setFcltyNm] = useState(""); const [fcltyCd, setFcltyCd] = useState(""); - const [isCalculating, setIsCalculating] = useState(false); // 그리드 관련 const searchInputRef = useRef(null); diff --git a/apps/fo/app/store/flowRate/index.tsx b/apps/fo/app/store/flowRate/index.tsx index ae5b7412b..c4c773115 100644 --- a/apps/fo/app/store/flowRate/index.tsx +++ b/apps/fo/app/store/flowRate/index.tsx @@ -344,7 +344,6 @@ export const flowRateSearchReducer:(set:(fn: (state: FlowRateSearchType) => Flow rainEffectDay = rainDay; } - let test = tmpData.find((item: FlowRateModalProps) => item.msrDt === item.msrDt); tmpData.push({ ...item, rainEffectDay: rainEffectDay, diff --git a/apps/fo/app/store/sewageOccur/index.tsx b/apps/fo/app/store/sewageOccur/index.tsx index a97494726..b8819dba8 100644 --- a/apps/fo/app/store/sewageOccur/index.tsx +++ b/apps/fo/app/store/sewageOccur/index.tsx @@ -1,4 +1,3 @@ -import DataForm from "@/app/components/common/DataForm"; import type { TableUpperProps } from "../dashboard"; import { getFetch } from "@/app/components/api"; export type { TableUpperProps }; @@ -31,26 +30,12 @@ export type SewageOccurProps = { } export type SewageOccurDetailProps = { - msrDt : string, - waterUsage : number, - swageChangePercent : number, - estimationSewage : number, + cnt : number, + sum : number, + yr:string, + usege:number } -type RawSewageData = { - msrDt: string; - inflAmnt: string; - // 기타 다른 필드 생략 -}; - - -/**==================================== - * Store - data - ====================================*/ - -/** - * (1) 메인페이지 - */ // 검색단 const LabelArray:string[] = ['구분', '시도', '시군구','용량별', '시설명', '조회기간', '시설상태', '권역', '단위유역', '중권역', '환경청별']; @@ -131,155 +116,9 @@ const upHeadListSewageOccurDetail:TableUpperProps[] = [ { id: "estimationSewage", title: "오수발생량 추정(m³/일)", row:0, rowSpan:2 }, ]; -const sewageOccurList:SewageOccurProps[] = [ -] +const sewageOccurList:SewageOccurProps[] = [] -const tempSewageOccurList:SewageOccurDetailProps[] = [ - { - msrDt: '2024-01', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 60, - }, - { - msrDt: '2024-02', - waterUsage: 106, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2024-03', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2024-04', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2024-05', - waterUsage: 100, - swageChangePercent: 10, - estimationSewage: 80, - }, - { - msrDt: '2024-06', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2024-07', - waterUsage: 100, - swageChangePercent: 580, - estimationSewage: 80, - }, - { - msrDt: '2024-08', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2024-09', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2024-10', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2024-11', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2024-12', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2025-01', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2025-02', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2025-03', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2025-04', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2025-05', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2025-06', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2025-07', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2025-08', - waterUsage: 100, - swageChangePercent: 0.8, - estimationSewage: 80, - }, - { - msrDt: '2025-09', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2025-10', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2025-11', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2025-12', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, -] +const tempSewageOccurList:SewageOccurDetailProps[] = [] /**==================================== * Store - API @@ -318,7 +157,6 @@ const fetchSewageOccurDetailList = async (bscFctCd: string, searchYear: string) export type SewageOccurActions = { searchSewageOccurList: (pageNo: number, pageSize: number, searchYear: string, part?: string, nameCd?: string, fcltCpct?: string, operationValue?: string, fcltyNm?: string) => void; searchSewageOccurDetailList: (bscFctCd: string, searchYear: string) => void; - calculateModalDataForAllFacilities: (facilityList: SewageOccurProps[], searchYear: string) => Promise; } export type SewageOccurType = { @@ -367,14 +205,6 @@ export const sewageOccurInitState: SewageOccurType = { } } -const dataFormSetting=(item : SewageOccurProps)=> { - DataForm({ type: 'float1', column: 'fctCpc', item: item as unknown as Record }); - DataForm({ type: 'float1', column: 'waterUsage', item: item as unknown as Record}); - DataForm({ type: 'float2', column: 'estimationSewage', item: item as unknown as Record}); - DataForm({ type: 'float2', column: 'sewageInputYear', item: item as unknown as Record}); - DataForm({ type: 'float2', column: 'sewageInputChungchun', item: item as unknown as Record}); -} - export type SewageOccurStore = SewageOccurType & SewageOccurActions; // Add type definitions for API responses @@ -390,9 +220,7 @@ type FlowResponse = { count: number; } -type SetStateFunction = (state: SewageOccurType | ((state: SewageOccurType) => SewageOccurType)) => void; - -export const sewageOccurReducer:(set:SetStateFunction)=>SewageOccurActions=(set: SetStateFunction) => { +export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { return { searchSewageOccurList: async (pageNo: number, pageSize: number, searchYear: string, part?: string, nameCd?: string, fcltCpct?: string, operationValue?: string, fcltyNm?: string) => { const res = await fetchSewageOccurList(pageNo, pageSize, searchYear, part, nameCd, fcltCpct, operationValue, fcltyNm); @@ -422,7 +250,7 @@ export const sewageOccurReducer:(set:SetStateFunction)=>SewageOccurActions=(set: } totWaterUsage += Number(item.inflAmnt); }); - let avg = totWaterUsage /res2.count; + const avg = totWaterUsage /res2.count; console.log("avg ", avg); item.waterUsage = avg * 0.65; item.sewageInputYear = sumFlow/res2.count; @@ -430,7 +258,7 @@ export const sewageOccurReducer:(set:SetStateFunction)=>SewageOccurActions=(set: return item; })); // 조회 데이터 설정 - set((state: SewageOccurType) => ({ + set((state: any) => ({ ...state, SewageOccur: pageSize<5000?{ ...state.SewageOccur, @@ -445,26 +273,29 @@ export const sewageOccurReducer:(set:SetStateFunction)=>SewageOccurActions=(set: searchSewageOccurDetailList: async (bscFctCd: string, searchYear: string) => { const res = await fetchSewageOccurDetailList(bscFctCd, searchYear); - console.log('resData ', res.data); - let monthData: number[] = []; + const monthData: SewageOccurDetailProps[] = []; res.data.forEach((item: FlowDataItem) => { - let month = item.msrDt?.substring(5, 7); + const month = item.msrDt?.substring(5, 7); const monthIdx = month ? Number(month) - 1 : -1; if (monthIdx >= 0) { - if (typeof monthData[monthIdx] === 'number') { - monthData[monthIdx] += Number(item.inflAmnt); + if (typeof monthData[monthIdx] === 'object') { + monthData[monthIdx].sum += Number(item.inflAmnt); + monthData[monthIdx].cnt++; } else { - monthData[monthIdx] = Number(item.inflAmnt); + monthData[monthIdx] = {cnt:1, sum:Number(item.inflAmnt), yr:item.msrDt.substring(0,4), usege:0}; } } }) + monthData.forEach(item => { + item.usege = item.sum/item.cnt *0.65 + }); set((state: SewageOccurType) => ({ ...state, SewageOccurDetail: { ...state.SewageOccurDetail, - gridListSewageOccurDetail: processedData, + gridListSewageOccurDetail: monthData, } })) }, diff --git a/apps/fo/eslint.config.mjs b/apps/fo/eslint.config.mjs index c85fb67c4..29e63f653 100644 --- a/apps/fo/eslint.config.mjs +++ b/apps/fo/eslint.config.mjs @@ -11,6 +11,10 @@ const compat = new FlatCompat({ const eslintConfig = [ ...compat.extends("next/core-web-vitals", "next/typescript"), + {rules:{ + // other rules.. + "@typescript-eslint/no-explicit-any": "off", + }}, ]; export default eslintConfig; diff --git a/apps/fo/src/entities/auth/lib/token-manager.ts b/apps/fo/src/entities/auth/lib/token-manager.ts index 40d32f33e..e86dba5f2 100644 --- a/apps/fo/src/entities/auth/lib/token-manager.ts +++ b/apps/fo/src/entities/auth/lib/token-manager.ts @@ -20,7 +20,7 @@ export class TokenManager { public setToken(key: string, value: string): void { setCookie(key, value, { - secure: window.location.protocol === "https:", + secure: location.protocol === "https:", sameSite: "lax", }); }