Files
frontend/apps/dm_new/app/store/wrStatus/index.tsx
T
2026-02-18 22:11:12 +09:00

130 lines
4.2 KiB
TypeScript

import { fetchType, getFetch } from "@/components/ui/api";
import type {
DmStatusDataType,
DmStatusChartType,
DmStatusBoardType,
} from "./type";
import type { SelectDataType } from "../common";
import { makeRegion } from "@/app/common/comFunction";
export type DmStatusActions = {
getDmStatusData(cityCd: SelectDataType[]): void; // 데이터의 연도 반환
};
export type DmStatusType = {
dmStatus: {
year : string;
statusData: DmStatusDataType[];
facilityTotals: string[];
chartData: DmStatusChartType[];
};
};
export const dmStatusState: DmStatusType = {
dmStatus: {
year : '',
statusData: [],
facilityTotals: [],
chartData: [],
},
};
export type DmStatusStore = DmStatusType & DmStatusActions;
export const DmStatusReducer = (set: any): DmStatusActions => {
return {
getDmStatusData: async (cityCd: SelectDataType[]) => {
const data = await getFetch(fetchType.FO, "/dashBoard/daemin");
const year = data.data[0]?.year; // API 응답에서 year 값을 할당합니다.
console.log('cityCd ', cityCd)
const dataSum = data.data.reduce(
(acc: DmStatusDataType, item: DmStatusDataType) => {
acc.sewage = (
parseInt(acc.sewage.replaceAll(",", "")) +
parseInt(item.sewage.replaceAll(",", ""))
).toLocaleString();
acc.rainwater = (
parseInt(acc.rainwater.replaceAll(",", "")) +
parseInt(item.rainwater.replaceAll(",", ""))
).toLocaleString();
acc.reclaimed = (
parseInt(acc.reclaimed.replaceAll(",", "")) +
parseInt(item.reclaimed.replaceAll(",", ""))
).toLocaleString();
acc.sewageCnt = (
parseInt(acc.sewageCnt.replaceAll(",", "")) +
parseInt(item.sewageCnt.replaceAll(",", ""))
).toLocaleString();
acc.rainwaterCnt = (
parseInt(acc.rainwaterCnt.replaceAll(",", "")) +
parseInt(item.rainwaterCnt.replaceAll(",", ""))
).toLocaleString();
acc.reclaimedCnt = (
parseInt(acc.reclaimedCnt.replaceAll(",", "")) +
parseInt(item.reclaimedCnt.replaceAll(",", ""))
).toLocaleString();
return acc;
},
{
region: "합계",
sewage: "0",
rainwater: "0",
reclaimed: "0",
sewageCnt: "0",
rainwaterCnt: "0",
reclaimedCnt: "0",
}
);
data.data.unshift(dataSum);
//console.log("dataSum ", dataSum);
const facilityTotals = [
"하수재이용시설" + "(총" + dataSum?.sewageCnt + "개소)",
"빗물재이용시설" + "(총" + dataSum?.rainwaterCnt + "개소)",
"중수도재이용시설" + "(총" + dataSum?.reclaimedCnt + "개소)",
];
const boardData: DmStatusBoardType[] = data.data.map(
(item: DmStatusDataType) => {
const regionText = item.sidoNm; //cityCd.find((city) => item.region === city.val);
const sewage = item.sewage;
const rainwater = item.rainwater;
const reclaimed = item.reclaimed;
const sewageCnt = item.sewageCnt;
const rainwaterCnt = item.rainwaterCnt;
const reclaimedCnt = item.reclaimedCnt;
return {
region: regionText ? regionText : item.region,
sewage: sewageCnt + "(" + sewage.toLocaleString() + ")",
rainwater: rainwaterCnt + "(" + rainwater.toLocaleString() + ")",
reclaimed: reclaimedCnt + "(" + reclaimed.toLocaleString() + ")",
};
}
).filter((item): item is DmStatusBoardType => item !== undefined);
//console.log("boardData ", boardData);
const chartData = data.data.map((item) => ({
label: makeRegion(
cityCd.find((city) => item.region === city.val)?.text ?? ""
),
하수: item.sewage,
빗물: item.rainwater,
중수도: item.reclaimed,
}));
set((state: DmStatusType) => ({
...state,
dmStatus: {
...state.dmStatus,
year : year,
statusData: boardData,
chartData: chartData,
facilityTotals: facilityTotals,
},
}));
},
};
};