wr: 하수재이용시설현황 속도 개선
This commit is contained in:
@@ -6,6 +6,12 @@ export function createDefaultPbnstItem(row: pubHasuType, index: number) {
|
||||
return JSON.parse(JSON.stringify({
|
||||
pbnstRuseFcltId: pk,
|
||||
swtrmtFcltId: "",
|
||||
swageTrtmfctId: row.bscFctCd || "",
|
||||
swageBscFctNm: row.bscFctNm || "",
|
||||
swageRgnCd: row.rgnCd || "",
|
||||
swageAdstDstrCd: row.adstDstrCd || "",
|
||||
swageRvbsnCd: row.rvbsnCd || "",
|
||||
swageFctCpc: Number(row.fctCpc) || 0,
|
||||
ruseUtztnFcltNm: "",
|
||||
fcltCpct: 0,
|
||||
ruseCpct: 0,
|
||||
@@ -44,4 +50,4 @@ export function createDefaultPbnstItem(row: pubHasuType, index: number) {
|
||||
cycl,
|
||||
// 필요한 값 있으면 여기에 추가
|
||||
} as fcBizType;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,15 +39,13 @@ export default function PbnstSttn() {
|
||||
auth,
|
||||
code,
|
||||
pbnstSttn,
|
||||
pbnstSttnSearch,
|
||||
pbnSttnInit,
|
||||
pbnstSttnList,
|
||||
getPbnStnDetail,
|
||||
getFlcts, // 하수재이용시설(tb_wr_pbnst_ruse_fclt) 조회
|
||||
resetPbnstDetail,
|
||||
getLaeSeCdCheck,
|
||||
} = useWrStore((state) => state);
|
||||
|
||||
const { pbnstSttnRes, fclts, pbnstSttnResCount } = pbnstSttn;
|
||||
const { pbnstSttnRes, pbnstSttnResCount } = pbnstSttn;
|
||||
const { laeSeCd } = auth; // 지자체구분코드
|
||||
|
||||
const [isReset, setIsReset] = useState(false);
|
||||
@@ -110,16 +108,16 @@ export default function PbnstSttn() {
|
||||
const excelClick = useCallback(() => {
|
||||
isDownloadTriggered.current = true;
|
||||
const fixedSearchValue = getFixedSearchValue(ref.current);
|
||||
pbnstSttnSearch(
|
||||
pbnstSttnList(
|
||||
true,
|
||||
String(1),
|
||||
"100000",
|
||||
fixedSearchValue,
|
||||
pbnRuseNm,
|
||||
searchYear,
|
||||
fclts
|
||||
[]
|
||||
);
|
||||
}, [pbnstSttnSearch, fclts, pbnRuseNm, searchYear, getFixedSearchValue]);
|
||||
}, [pbnstSttnList, pbnRuseNm, searchYear, getFixedSearchValue]);
|
||||
|
||||
const cellCLick = useCallback(
|
||||
(index: number | undefined) => {
|
||||
@@ -134,28 +132,30 @@ export default function PbnstSttn() {
|
||||
useEffect(() => {
|
||||
getLaeSeCdCheck();
|
||||
useInitRef.current = true;
|
||||
if (!pbnstSttn.isFcltsLoaded) {
|
||||
getFlcts(); // 하수재이용시설 조회
|
||||
}
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
if (
|
||||
useInitRef.current === true &&
|
||||
laeSeCd !== undefined &&
|
||||
pbnstSttn.isFcltsLoaded &&
|
||||
!pbnstSttn.isTableLoaded &&
|
||||
fclts.length > 0
|
||||
!pbnstSttn.isTableLoaded
|
||||
) {
|
||||
pbnSttnInit("1", String(DEFAULT_LIST_SIZE), getFixedSearchValue(ref.current), searchYear, fclts);
|
||||
pbnstSttnList(
|
||||
false,
|
||||
"1",
|
||||
String(DEFAULT_LIST_SIZE),
|
||||
getFixedSearchValue(ref.current),
|
||||
pbnRuseNm,
|
||||
searchYear,
|
||||
[]
|
||||
);
|
||||
}
|
||||
}, [
|
||||
fclts,
|
||||
laeSeCd,
|
||||
pbnstSttn.isFcltsLoaded,
|
||||
pbnstSttn.isTableLoaded,
|
||||
pbnRuseNm,
|
||||
searchYear,
|
||||
pbnSttnInit,
|
||||
pbnstSttnList,
|
||||
getFixedSearchValue,
|
||||
]);
|
||||
|
||||
@@ -262,16 +262,16 @@ export default function PbnstSttn() {
|
||||
}
|
||||
queryClick={() => {
|
||||
const fixedSearchValue = getFixedSearchValue(ref.current);
|
||||
pbnstSttnSearch(
|
||||
pbnstSttnList(
|
||||
false,
|
||||
"1",
|
||||
String(DEFAULT_LIST_SIZE),
|
||||
fixedSearchValue,
|
||||
pbnRuseNm,
|
||||
searchYear,
|
||||
fclts
|
||||
[]
|
||||
);
|
||||
setIsReset(true);
|
||||
// setIsReset(true);
|
||||
}}
|
||||
excelClick={excelClick}
|
||||
initClick={function (): void {
|
||||
@@ -301,16 +301,16 @@ export default function PbnstSttn() {
|
||||
}}
|
||||
onPageChange={(page: number) => {
|
||||
const fixedSearchValue = getFixedSearchValue(ref.current);
|
||||
pbnstSttnSearch(
|
||||
pbnstSttnList(
|
||||
false,
|
||||
String(page),
|
||||
String(DEFAULT_LIST_SIZE),
|
||||
fixedSearchValue,
|
||||
pbnRuseNm,
|
||||
searchYear,
|
||||
fclts
|
||||
[]
|
||||
);
|
||||
setIsReset(false);
|
||||
// setIsReset(false);
|
||||
}}
|
||||
resetPageNo={isReset}
|
||||
widthFixed={true}
|
||||
|
||||
@@ -62,10 +62,18 @@ export type PbnstDemandComType = {
|
||||
export const pubHasuZod = z.object({
|
||||
choose: z.boolean().default(false),
|
||||
bscFctCd: z.string(),
|
||||
rvbsnCd: z.string().default(""), // 권역코드
|
||||
rvbsn: z.string().default(""),
|
||||
lgbsn: z.string().default(""),
|
||||
mdmbsn: z.string().default(""),
|
||||
rgnNm: z.string().default(""),
|
||||
rgnCd: z.string().default(""), // 지역코드
|
||||
adstDstrCd: z.string().default(""), // 행정구역코드
|
||||
sido: z.string().default(""), // 시도
|
||||
gugun: z.string().default(""), // 구군
|
||||
bscFctNm: z.string().default(""), // 시설명
|
||||
efflWqltStndrdNm: z.string().default(""), // 지역구분
|
||||
tel: z.string().default(""),
|
||||
fctCpc: z.number().default(0), // 시설용량
|
||||
addr: z.string().nullish(), // 위치
|
||||
});
|
||||
@@ -258,6 +266,15 @@ const PrfSchema = z.object({
|
||||
export const pbnstRegZod = z.object({
|
||||
pbnstRuseFcltId: z.string().default(""),
|
||||
swtrmtFcltId: z.string().default(""),
|
||||
swageTrtmfctId: z.string().default(""),
|
||||
swageBscFctNm: z.string().default(""),
|
||||
swageRgnCd: z.string().default(""),
|
||||
swageAdstDstrCd: z.string().default(""),
|
||||
swageRvbsnCd: z.string().default(""),
|
||||
swageFctCpc: z.preprocess(
|
||||
(v) => (v !== null && v !== undefined ? Number(v) : v),
|
||||
z.number().default(0)
|
||||
),
|
||||
ruseUtztnFcltNm: //z.string().default(''),
|
||||
z.preprocess(
|
||||
(v) => (v !== null && v !== undefined ? String(v).trim() : ""), // null/undefined → "", 공백 제거
|
||||
|
||||
@@ -3,7 +3,7 @@ import type {
|
||||
TableUpperProps,
|
||||
} from "@/app/store/common/type/header";
|
||||
import type { FcPrfType } from "@/app/store/prfmncReg/pbnstPrfmncReg/type";
|
||||
import { fetchType, getFetch, postFectch } from "@/components/lib/api";
|
||||
import { fetchType, getFetch, getFetchWithCount, postFectch } from "@/components/lib/api";
|
||||
import type { ReturnType } from "@common/business_components/ui";
|
||||
import moment from "moment";
|
||||
import { type z } from "zod";
|
||||
@@ -54,6 +54,15 @@ export type pbnstSttnState = {
|
||||
|
||||
type pbnstSttnActions = {
|
||||
pbnstChSttnHead: (headList: z.infer<typeof sttnHeadListType>) => void;
|
||||
pbnstSttnList: (
|
||||
isExcel: boolean,
|
||||
page: string,
|
||||
total: string,
|
||||
reurnValue: ReturnType,
|
||||
searchNm: string | undefined,
|
||||
year: string,
|
||||
fclts: string[]
|
||||
) => void;
|
||||
pbnstSttnSearch: (
|
||||
isExcel: boolean,
|
||||
page: string,
|
||||
@@ -246,6 +255,119 @@ export const hasuListFetch = async (
|
||||
return { data: data, count: getRuseList.count };
|
||||
};
|
||||
|
||||
export const pbnstListFetch = async (
|
||||
page: string,
|
||||
total: string,
|
||||
reurnValue: ReturnType,
|
||||
searchNm: string | undefined,
|
||||
year: string
|
||||
) => {
|
||||
let nameCd = "0";
|
||||
let partStr = "A";
|
||||
|
||||
switch (reurnValue.partValue) {
|
||||
case "R":
|
||||
if (reurnValue.regionValue !== "0") {
|
||||
if (reurnValue.unitWaterShedValue === "0") nameCd = reurnValue.regionValue;
|
||||
else if (reurnValue.middleRegionValue === "0") nameCd = reurnValue.unitWaterShedValue;
|
||||
else nameCd = reurnValue.middleRegionValue;
|
||||
}
|
||||
partStr = reurnValue.partValue;
|
||||
break;
|
||||
default:
|
||||
if (reurnValue.sidoValue && reurnValue.sidoValue !== "0") nameCd = reurnValue.sidoValue;
|
||||
if (reurnValue.sigunValue && reurnValue.sigunValue !== "0") nameCd = reurnValue.sigunValue;
|
||||
partStr = reurnValue.envPartValue !== "0" ? reurnValue.envPartValue : "A";
|
||||
break;
|
||||
}
|
||||
|
||||
let url = `/reuseFc/pbnstList/${year}/${page}/${total}/${partStr}/${nameCd}/0/1/SW`;
|
||||
if (searchNm && searchNm.length > 0) {
|
||||
url += `?swtrmtFcltNm=${searchNm}`;
|
||||
}
|
||||
|
||||
const response = await getFetchWithCount(fetchType.WR, url);
|
||||
const wrList: WaterReuseFacility[] = Array.isArray(response.data)
|
||||
? response.data
|
||||
: [];
|
||||
|
||||
const swtrmtFcltIds = [
|
||||
...new Set(
|
||||
wrList
|
||||
.map((item: WaterReuseFacility) => {
|
||||
if (item.swtrmtFcltId && item.swtrmtFcltId.length > 0) {
|
||||
return item.swtrmtFcltId;
|
||||
}
|
||||
|
||||
if (item.pbnstRuseFcltId && item.pbnstRuseFcltId.length >= 11) {
|
||||
return item.pbnstRuseFcltId.substring(0, 11);
|
||||
}
|
||||
|
||||
return "";
|
||||
})
|
||||
.filter(Boolean)
|
||||
),
|
||||
];
|
||||
|
||||
let pbnListData: pubHasuType[] = [];
|
||||
|
||||
if (swtrmtFcltIds.length > 0) {
|
||||
let foUrl = `/prcsFclt/ruseInfo/1/${swtrmtFcltIds.length + 1}`;
|
||||
if (searchNm && searchNm.length > 0) {
|
||||
foUrl += `/${searchNm}`;
|
||||
}
|
||||
|
||||
const pbnList = await postFectch(
|
||||
foUrl,
|
||||
swtrmtFcltIds,
|
||||
fetchType.COMMON
|
||||
);
|
||||
|
||||
pbnListData = Array.isArray(pbnList?.data) ? pbnList.data : [];
|
||||
}
|
||||
|
||||
const data: WaterReuseFacility[] = wrList.map((item: WaterReuseFacility) => {
|
||||
const swtrmtFcltId =
|
||||
item.swtrmtFcltId && item.swtrmtFcltId.length > 0
|
||||
? item.swtrmtFcltId
|
||||
: item.pbnstRuseFcltId?.substring(0, 11) ?? "";
|
||||
|
||||
const findData = pbnListData.find(
|
||||
(fclt: pubHasuType) => fclt.bscFctCd === swtrmtFcltId
|
||||
);
|
||||
|
||||
return {
|
||||
...item,
|
||||
swtrmtFcltId,
|
||||
rvbsn: findData?.rvbsn || item.rvbsn || "-",
|
||||
lgbsn: findData?.lgbsn || item.lgbsn || "-",
|
||||
mdmbsn: findData?.mdmbsn || item.mdmbsn || "-",
|
||||
rgnNm: findData?.rgnNm || item.rgnNm || "-",
|
||||
sido: findData?.sido || item.sido || "-",
|
||||
gugun: findData?.gugun || item.gugun || "-",
|
||||
bscFctNm: findData?.bscFctNm || item.bscFctNm || "-",
|
||||
efflWqltStndrdNm:
|
||||
findData?.efflWqltStndrdNm || item.efflWqltStndrdNm || "-",
|
||||
tel: findData?.tel || item.tel || "-",
|
||||
fctCpc: Number(findData?.fctCpc ?? item.fctCpc) || 0,
|
||||
ruseUtztnFcltNm: item.ruseUtztnFcltNm || "-",
|
||||
fcltCpct: Number(item.fcltCpct) || 0,
|
||||
splyExtraCpct: Number(item.splyExtraCpct) || 0,
|
||||
ruseCpct: Number(item.ruseCpct) || 0,
|
||||
usageTotal: Number(item.usageTotal) || 0,
|
||||
inUsage: Number(item.inUsage) || 0,
|
||||
outUsage: Number(item.outUsage) || 0,
|
||||
operMthd: item.operMthd || "-",
|
||||
rprtvBzenty: item.rprtvBzenty || "-",
|
||||
bgngDt: item.bgngDt || "",
|
||||
endDt: item.endDt || "",
|
||||
prfList: item.prfList ?? [],
|
||||
};
|
||||
});
|
||||
|
||||
return { data, count: response.count };
|
||||
};
|
||||
|
||||
export const pbnstSttnActionsExport: (set: any) => pbnstSttnActions = (
|
||||
set: any
|
||||
) => {
|
||||
@@ -261,6 +383,49 @@ export const pbnstSttnActionsExport: (set: any) => pbnstSttnActions = (
|
||||
},
|
||||
}));
|
||||
},
|
||||
pbnstSttnList: async (
|
||||
isExcel: boolean,
|
||||
page: string,
|
||||
total: string,
|
||||
reurnValue: ReturnType,
|
||||
searchNm: string | undefined,
|
||||
year: string,
|
||||
_fclts: string[]
|
||||
) => {
|
||||
try {
|
||||
const pbnstSttnRes = await pbnstListFetch(
|
||||
page,
|
||||
total,
|
||||
reurnValue,
|
||||
searchNm,
|
||||
year
|
||||
);
|
||||
|
||||
if (isExcel) {
|
||||
const pbnstExcel = excelPbnstSttnParsing(pbnstSttnRes.data);
|
||||
set((state: pbnstSttnState) => ({
|
||||
...state,
|
||||
pbnstSttn: {
|
||||
...state.pbnstSttn,
|
||||
excelList: pbnstExcel,
|
||||
},
|
||||
}));
|
||||
} else {
|
||||
set((state: pbnstSttnState) => ({
|
||||
...state,
|
||||
pbnstSttn: {
|
||||
...state.pbnstSttn,
|
||||
pbnstSttnRes: pbnstSttnRes.data,
|
||||
pbnstSttnResCount: pbnstSttnRes.count,
|
||||
pbnstDetail: {} as customPbnst,
|
||||
isTableLoaded: true,
|
||||
},
|
||||
}));
|
||||
}
|
||||
} catch (error) {
|
||||
console.log("error", error);
|
||||
}
|
||||
},
|
||||
//테이블 헤드를 조정한다.
|
||||
pbnstChSttnHead: async (
|
||||
headList: z.infer<typeof sttnHeadListType>
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
import type { PrfType } from "@/app/store/prfmncReg/pbnstPrfmncReg/type";
|
||||
|
||||
export type WaterReuseFacility = {
|
||||
swtrmtFcltId?: string;
|
||||
bscFctNm: string; // 기본시설명 (예: "난지")
|
||||
efflWqltStndrdNm: string; // 방류수 수질 기준명 (예: "500톤 이상(Ⅲ지역)")
|
||||
fcltCpct: number; // 시설 용량 (숫자형, 예: 1)
|
||||
fctCpc: string; // 시설 처리 능력 (예: "2360000")
|
||||
fctCpc: number; // 시설 처리 능력 (예: 2360000)
|
||||
gugun: string; // 구군 정보 (예: " ")
|
||||
inUsage: number; // 유입량 (예: 1387)
|
||||
lgbsn: string; // 대수계 (예: "한강본류")
|
||||
|
||||
Reference in New Issue
Block a user