wr: 통계
This commit is contained in:
@@ -41,7 +41,7 @@ export default function RswtStat() {
|
||||
"개소": item.ctpvCnt,
|
||||
// "건축연면적(m³)": item.archArea,
|
||||
"처리용량(m³)": item.filtrTrtmfctCpct,
|
||||
"물사용량(m³/년)": item.wtrUsqty,
|
||||
// "물사용량(m³/년)": item.wtrUsqty,
|
||||
"중수도+대체수이용량(m³/년)": item.rswtAltSum,
|
||||
"중수도이용량(m³/년)": item.rswtrUsqty,
|
||||
"대체수이용량(m³/년)": item.altUswtrUtztnQnt,
|
||||
@@ -59,8 +59,8 @@ export default function RswtStat() {
|
||||
data: (data as unknown as JSON[]) ?? [],
|
||||
fileName: "중수도재이용통계",
|
||||
sheetNameArray: ["Sheet1"],
|
||||
headerRange: "A1:N1",
|
||||
decimalArray0: [1,2,3,4,5,6,7,8,9,10,11,12,13], // 0부터 시작
|
||||
headerRange: "A1:M1",
|
||||
decimalArray0: [1,2,3,4,5,6,7,8,9,10,11,12], // 0부터 시작
|
||||
})
|
||||
} else {
|
||||
alert(t("excelDownErrMsg"))
|
||||
@@ -174,15 +174,9 @@ export default function RswtStat() {
|
||||
} else if (i == 12) {
|
||||
const value = Number(item[12]) || 0;
|
||||
sidoData[i] = (Number(sidoData[i]) + value) as string | number;
|
||||
} else if (i == 13) {
|
||||
const value = Number(item[13]) || 0;
|
||||
sidoData[i] = (Number(sidoData[i]) + value) as string | number;
|
||||
} else if (i == 14) {
|
||||
const value = Number(item[14]) || 0;
|
||||
sidoData[i] = (Number(sidoData[i]) + value) as string | number;
|
||||
} else if (i == 16) {
|
||||
const value = Number(item[16]) || 0;
|
||||
sidoData[i] = (Number(sidoData[i]) + value) as string | number;
|
||||
} else {
|
||||
sidoData[i] = '';
|
||||
}
|
||||
@@ -209,7 +203,7 @@ export default function RswtStat() {
|
||||
});
|
||||
|
||||
const sidoSummaryList = Array.from(sidoDataMap.values());
|
||||
const sidoTotalSummary = [['전국', '', '합계', 0, '', '', 0, '', '', 0, 0, 0, 0, 0, 0, '']];
|
||||
const sidoTotalSummary = [['전국', '', '합계', 0, '', '', 0, '', '', 0, 0, 0, 0, '', 0]];
|
||||
sidoSummaryList.forEach((item: (string | number)[]) => {
|
||||
item.forEach((value: string | number, index: number) => {
|
||||
if (typeof value === 'number') {
|
||||
@@ -226,7 +220,7 @@ export default function RswtStat() {
|
||||
const sheetArray: SheetParameter[] = [{
|
||||
data: excelData,
|
||||
headerNum: 3,
|
||||
headerRange: "A1:P3",
|
||||
headerRange: "A1:O3",
|
||||
sheetName: 'sheet1',
|
||||
startCol: 'A',
|
||||
decimalArray0: [1,2,3,4,5,6,7,8,9,10,11,12], // 0부터 시작
|
||||
|
||||
@@ -1,41 +1,51 @@
|
||||
import type { RainStatProps } from ".";
|
||||
import { codeToText } from "@/components/lib/func/common";
|
||||
import type { RainStatProps } from ".";
|
||||
|
||||
export const excelRainStat = (excelList:RainStatProps[]) : (string | number)[][] => {
|
||||
const toUseTypeText = (val: string) =>
|
||||
val
|
||||
.split(",")
|
||||
.map((code) => code.trim())
|
||||
.filter(Boolean)
|
||||
.map((code) => codeToText(code, "dmdUszCd") ?? code)
|
||||
.join(", ");
|
||||
|
||||
export const excelRainStat = (
|
||||
excelList: RainStatProps[]
|
||||
): (string | number)[][] => {
|
||||
const excelData: (string | number)[][] = [];
|
||||
excelList.forEach((item) => {
|
||||
excelList.forEach((item) => {
|
||||
excelData.push([
|
||||
//시도
|
||||
item.ctpvCd ?? "",
|
||||
//시군구
|
||||
item.sggCd ?? "",
|
||||
//행정구역명
|
||||
String(item.areaNm) ?? "",
|
||||
//행정구역명
|
||||
String(item.areaNm) ?? "",
|
||||
//시설명
|
||||
String(item.bdstNm) ?? "",
|
||||
//건축물용도코드 (값 없음)
|
||||
//String(item.bdstUsgCd) ?? "",
|
||||
"",
|
||||
codeToText(String(item.bdstUsgCd ?? ""), "bdstUsgCd") ?? String(item.bdstUsgCd ?? ""),
|
||||
//주소
|
||||
String(item.daddr) ?? "",
|
||||
//법적의무대상여부
|
||||
String(item.lawTrgtYn)==="Y" ? "대상" : "미대상",
|
||||
String(item.lawTrgtYn) === "Y" ? "대상" : "미대상",
|
||||
//설치완료일자
|
||||
String(item.instlCmptnDt).substring(0, 10) ?? "",
|
||||
//설치비용
|
||||
item.instlCst ?? "",
|
||||
//접수면종류
|
||||
String(item.pntfColKnd) ?? "",
|
||||
//집수면종류
|
||||
codeToText(String(item.pntfColKnd ?? ""), "rainFcltCd") ?? String(item.pntfColKnd ?? ""),
|
||||
//여과등처리시설유무
|
||||
String(item.filtrTrtmfctYn) ?? "",
|
||||
//처리용량(저류조용량)
|
||||
item.dtfcltCpct ?? "",
|
||||
//연간사용량
|
||||
item.wtrUsqty ?? "",
|
||||
//이용용도코드
|
||||
item.utztnUsgCd ?? "",
|
||||
//연간운영비
|
||||
item.anlOperCst ?? "",
|
||||
]);
|
||||
});
|
||||
//처리용량(저류조용량)
|
||||
item.dtfcltCpct ?? "",
|
||||
//연간사용량
|
||||
item.wtrUsqty ?? "",
|
||||
//이용용도코드
|
||||
toUseTypeText(item.utztnUsgCd ?? ""),
|
||||
//연간운영비
|
||||
item.anlOperCst ?? "",
|
||||
]);
|
||||
});
|
||||
return excelData;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -89,6 +89,7 @@ export const rainStatActionsExport = (
|
||||
searchRainStatList: async (year: string, city: SelectDataType[]) => {
|
||||
const res = await fetchRainStatList(year);
|
||||
const cityArr: any[] = [];
|
||||
excelDownList.length = 0;
|
||||
|
||||
res.filter((resFilter: RainStatProps) =>
|
||||
city.some((cityCd) =>
|
||||
@@ -104,7 +105,6 @@ export const rainStatActionsExport = (
|
||||
if (obj) {
|
||||
obj.instlCst += item.instlCst;
|
||||
obj.dtfcltCpct += item.dtfcltCpct;
|
||||
obj.wtrUsqty += item.wtrUsqty;
|
||||
obj.anlOperCst += item.anlOperCst;
|
||||
obj.tmp += 1;
|
||||
} else {
|
||||
@@ -113,7 +113,7 @@ export const rainStatActionsExport = (
|
||||
obj.instlCst = item.instlCst;
|
||||
obj.tmp = 1;
|
||||
obj.dtfcltCpct = item.dtfcltCpct;
|
||||
obj.wtrUsqty = item.wtrUsqty;
|
||||
obj.wtrUsqty = 0;
|
||||
obj.anlOperCst = item.anlOperCst;
|
||||
obj.lndwtr = 0; //조경용수
|
||||
obj.cleanToilUswtr = 0; //청소화장실용수
|
||||
@@ -138,6 +138,15 @@ export const rainStatActionsExport = (
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
obj.wtrUsqty =
|
||||
obj.lndwtr +
|
||||
obj.cleanToilUswtr +
|
||||
obj.resn +
|
||||
obj.farmUswtr +
|
||||
obj.indstUswtr +
|
||||
obj.hydUswtr +
|
||||
obj.ithlEtcUswtr;
|
||||
});
|
||||
|
||||
const totalObj = {
|
||||
@@ -145,7 +154,7 @@ export const rainStatActionsExport = (
|
||||
tmp: 0,
|
||||
instlCst: 0, //설치비
|
||||
dtfcltCpct: 0, //저류조용량
|
||||
bdstUsgCd: 0, //연간사용량
|
||||
wtrUsqty: 0, //연간사용량
|
||||
lndwtr: 0, //조경용수
|
||||
cleanToilUswtr: 0, //청소화장실용수
|
||||
resn: 0, //세척살수용수
|
||||
@@ -165,8 +174,8 @@ export const rainStatActionsExport = (
|
||||
totalObj.dtfcltCpct += !isNaN(Number(item.dtfcltCpct))
|
||||
? Number(item.dtfcltCpct)
|
||||
: 0;
|
||||
totalObj.bdstUsgCd += !isNaN(Number(item.bdstUsgCd))
|
||||
? Number(item.bdstUsgCd)
|
||||
totalObj.wtrUsqty += !isNaN(Number(item.wtrUsqty))
|
||||
? Number(item.wtrUsqty)
|
||||
: 0;
|
||||
totalObj.lndwtr += !isNaN(Number(item.lndwtr))
|
||||
? Number(item.lndwtr)
|
||||
@@ -196,7 +205,7 @@ export const rainStatActionsExport = (
|
||||
tmp: item.tmp,
|
||||
instlCst: item.instlCst, //설치비
|
||||
dtfcltCpct: item.dtfcltCpct, //저류조용량
|
||||
bdstUsgCd: item.bdstUsgCd, //연간사용량
|
||||
wtrUsqty: item.wtrUsqty, //연간사용량
|
||||
lndwtr: item.lndwtr, //조경용수
|
||||
cleanToilUswtr: item.cleanToilUswtr, //청소화장실용수
|
||||
resn: item.resn, //세척살수용수
|
||||
@@ -208,17 +217,30 @@ export const rainStatActionsExport = (
|
||||
});
|
||||
});
|
||||
|
||||
cityArr.forEach((item) => {
|
||||
item.instlCst = Math.round(Number(item.instlCst) / 1000000);
|
||||
item.anlOperCst = Math.round(Number(item.anlOperCst) / 1000000);
|
||||
});
|
||||
|
||||
totalObj.instlCst = Math.round(Number(totalObj.instlCst) / 1000000);
|
||||
totalObj.anlOperCst = Math.round(Number(totalObj.anlOperCst) / 1000000);
|
||||
|
||||
|
||||
//상세
|
||||
const rainDetailList: RainStatProps[] = [];
|
||||
res.forEach((item: RainStatProps) => {
|
||||
const utztnUsgArray = new Array<string>();
|
||||
let wtrUsqty = 0;
|
||||
item.guideStats.forEach((guideStat) => {
|
||||
utztnUsgArray.push(guideStat.utztnUsgCd);
|
||||
wtrUsqty += Number(guideStat.ruseFcltUtztnQnt) || 0;
|
||||
});
|
||||
rainDetailList.push({
|
||||
...item,
|
||||
instlCst: Math.round(Number(item.instlCst) / 1000000),
|
||||
wtrUsqty,
|
||||
utztnUsgCd: utztnUsgArray.join(", "),
|
||||
anlOperCst: Math.round(Number(item.anlOperCst) / 1000000),
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -1,50 +1,53 @@
|
||||
import type { SelectDataType } from "@common/business_components/ui";
|
||||
import { codeToText } from "@/components/lib/func/common";
|
||||
import type { RswtStatProps } from ".";
|
||||
|
||||
export const excelRswtStat = (excelList: RswtStatProps[], rswtBdstType : SelectDataType[] ) : (string | number)[][] => {
|
||||
const toUseTypeText = (val: string) =>
|
||||
val
|
||||
.split(",")
|
||||
.map((code) => code.trim())
|
||||
.filter(Boolean)
|
||||
.map((code) => codeToText(code, "dmdUszCd") ?? code)
|
||||
.join(", ");
|
||||
|
||||
|
||||
console.log('bdstUsgCd ', rswtBdstType)
|
||||
export const excelRswtStat = (
|
||||
excelList: RswtStatProps[]
|
||||
): (string | number)[][] => {
|
||||
const excelData: (string | number)[][] = [];
|
||||
excelList.forEach((item) => {
|
||||
excelData.push([
|
||||
//시도
|
||||
String(item.ctpvCd) ?? "",
|
||||
//시군구
|
||||
String(item.sggCd) ?? "",
|
||||
//행정구역명
|
||||
String(item.areaNm) ?? "",
|
||||
//건축물명
|
||||
String(item.bdstNm) ?? "",
|
||||
//건축물용도코드(빈칸)
|
||||
//String(item.bdstUsgCd) ?? "",
|
||||
rswtBdstType?.find((cd)=> cd.val === item.bdstUsgCd.toString())?.text ?? "", //건축물용도
|
||||
//주소
|
||||
String(item.daddr) ?? "",
|
||||
//법적의무대상여부
|
||||
String(item.lawTrgtYn)==="Y" ? "대상" : "미대상",
|
||||
//설치완료일자
|
||||
item.instlCmptnDt ? String(item.instlCmptnDt).substring(0, 10) : "",
|
||||
//가동개시일(빈칸)
|
||||
//String(item.instlCst) ?? "",
|
||||
"",
|
||||
//건축물면적
|
||||
// item.archArea ?? "",
|
||||
//처리용량
|
||||
item.filtrTrtmfctCpct ?? "",
|
||||
//물사용량
|
||||
item.wtrUsqty ?? "",
|
||||
//중수도+대체수이용량
|
||||
item.rswtAltSum ?? "",
|
||||
//중수도이용량
|
||||
item.rswtrUsqty ?? "",
|
||||
//대체수이용량
|
||||
item.altUswtrUtztnQnt ?? "",
|
||||
//중수도용도
|
||||
String(item.utztnUsgCd) ?? "",
|
||||
//연간운영비
|
||||
item.anlOperCst ?? "",
|
||||
]);
|
||||
});
|
||||
excelList.forEach((item) => {
|
||||
excelData.push([
|
||||
//시도
|
||||
String(item.ctpvCd) ?? "",
|
||||
//시군구
|
||||
String(item.sggCd) ?? "",
|
||||
//행정구역명
|
||||
String(item.areaNm) ?? "",
|
||||
//건축물명
|
||||
String(item.bdstNm) ?? "",
|
||||
//건축물용도코드
|
||||
codeToText(String(item.bdstUsgCd ?? ""), "rswtBdstType") ?? String(item.bdstUsgCd ?? ""),
|
||||
//주소
|
||||
String(item.daddr) ?? "",
|
||||
//법적의무대상여부
|
||||
String(item.lawTrgtYn) === "Y" ? "대상" : "미대상",
|
||||
//설치완료일자
|
||||
item.instlCmptnDt ? String(item.instlCmptnDt).substring(0, 10) : "",
|
||||
//가동개시일(빈칸)
|
||||
"",
|
||||
//처리용량
|
||||
item.filtrTrtmfctCpct ?? "",
|
||||
//물사용량
|
||||
// item.wtrUsqty ?? "",
|
||||
//중수도+대체수이용량
|
||||
item.rswtAltSum ?? "",
|
||||
//중수도이용량
|
||||
item.rswtrUsqty ?? "",
|
||||
//대체수이용량
|
||||
item.altUswtrUtztnQnt ?? "",
|
||||
//중수도용도
|
||||
toUseTypeText(String(item.utztnUsgCd ?? "")),
|
||||
//연간운영비
|
||||
item.anlOperCst ?? "",
|
||||
]);
|
||||
});
|
||||
return excelData;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -30,12 +30,12 @@ export const rswtStatHeadListExport :TableUpperProps[]=[
|
||||
row:0,
|
||||
rowSpan:2
|
||||
},
|
||||
{
|
||||
id: "wtrUsqty",
|
||||
title: "물사용량(m³/년)",
|
||||
row:0,
|
||||
rowSpan:2
|
||||
},
|
||||
// {
|
||||
// id: "wtrUsqty",
|
||||
// title: "물사용량(m³/년)",
|
||||
// row:0,
|
||||
// rowSpan:2
|
||||
// },
|
||||
{
|
||||
id: "rswtAltSum",
|
||||
title: "중수도+대체수이용량(m³/년)",
|
||||
@@ -105,4 +105,4 @@ export const rswtStatHeadListExport :TableUpperProps[]=[
|
||||
},
|
||||
|
||||
|
||||
]
|
||||
]
|
||||
|
||||
@@ -35,6 +35,7 @@ export type RswtStatProps = {
|
||||
|
||||
export type GuideStatProps = {
|
||||
utztnUsgCd: string
|
||||
splyUswtrUtztnQnt: number
|
||||
ruseFcltUtztnQnt: number
|
||||
}
|
||||
|
||||
@@ -80,7 +81,15 @@ export const rswtStatActionsExport: (set: any) => rswtStatActions = (
|
||||
return city.some(el => el.val === code);
|
||||
});
|
||||
const cityArr: any[] = [];
|
||||
excelDownList.length = 0;
|
||||
data.forEach((item: RswtStatProps) => {
|
||||
const itemAltUswtrUtztnQnt =
|
||||
item.guideStats && item.guideStats.length > 0
|
||||
? item.guideStats.reduce(
|
||||
(sum, guide) => sum + (Number(guide.splyUswtrUtztnQnt) || 0),
|
||||
0
|
||||
)
|
||||
: Number(item.altUswtrUtztnQnt) || 0;
|
||||
let obj = cityArr.find((e) => {
|
||||
return e.ctpvCd == item.ctpvCd
|
||||
})
|
||||
@@ -90,9 +99,7 @@ export const rswtStatActionsExport: (set: any) => rswtStatActions = (
|
||||
// obj.archArea += item.archArea 건축면적 삭제
|
||||
obj.filtrTrtmfctCpct += item.filtrTrtmfctCpct //처리용량
|
||||
obj.wtrUsqty += item.wtrUsqty //물사용량
|
||||
obj.rswtAltSum += (item.rswtrUsqty + item.altUswtrUtztnQnt) //중수도+대체수
|
||||
obj.rswtrUsqty += item.rswtrUsqty //중수도사용량
|
||||
obj.altUswtrUtztnQnt += item.altUswtrUtztnQnt //대체수이용량
|
||||
obj.altUswtrUtztnQnt += itemAltUswtrUtztnQnt //대체수이용량
|
||||
obj.anlOperCst += item.anlOperCst //연간운영비용
|
||||
} else {
|
||||
obj = {
|
||||
@@ -100,9 +107,9 @@ export const rswtStatActionsExport: (set: any) => rswtStatActions = (
|
||||
ctpvCnt: 1,
|
||||
filtrTrtmfctCpct: item.filtrTrtmfctCpct,
|
||||
wtrUsqty: item.wtrUsqty,
|
||||
rswtAltSum: item.rswtrUsqty + item.altUswtrUtztnQnt,
|
||||
rswtrUsqty: item.rswtrUsqty,
|
||||
altUswtrUtztnQnt: item.altUswtrUtztnQnt,
|
||||
rswtAltSum: 0,
|
||||
rswtrUsqty: 0,
|
||||
altUswtrUtztnQnt: itemAltUswtrUtztnQnt,
|
||||
anlOperCst: item.anlOperCst,
|
||||
lndwtr: 0,
|
||||
cleanToilUswtr: 0,
|
||||
@@ -127,6 +134,15 @@ export const rswtStatActionsExport: (set: any) => rswtStatActions = (
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
obj.rswtrUsqty =
|
||||
obj.lndwtr +
|
||||
obj.cleanToilUswtr +
|
||||
obj.farmUswtr +
|
||||
obj.indstUswtr +
|
||||
obj.hydUswtr +
|
||||
obj.ithlEtcUswtr;
|
||||
obj.rswtAltSum = obj.rswtrUsqty + obj.altUswtrUtztnQnt;
|
||||
});
|
||||
|
||||
const total: any = {
|
||||
@@ -163,6 +179,11 @@ export const rswtStatActionsExport: (set: any) => rswtStatActions = (
|
||||
total.ithlEtcUswtr += item.ithlEtcUswtr;
|
||||
});
|
||||
|
||||
cityArr.forEach(item => {
|
||||
item.anlOperCst = Math.round(Number(item.anlOperCst) / 1000000);
|
||||
});
|
||||
total.anlOperCst = Math.round(Number(total.anlOperCst) / 1000000);
|
||||
|
||||
cityArr.unshift(total);
|
||||
|
||||
cityArr.forEach(item => {
|
||||
@@ -189,16 +210,23 @@ export const rswtStatActionsExport: (set: any) => rswtStatActions = (
|
||||
const rswtDetailList: RswtStatProps[] = [];
|
||||
res.forEach((item: RswtStatProps) => {
|
||||
const utztnUsgArray = new Array<string>();
|
||||
let rswtrUsqty = 0;
|
||||
let altUswtrUtztnQnt = 0;
|
||||
item.guideStats.forEach((guideStat) => {
|
||||
utztnUsgArray.push(guideStat.utztnUsgCd);
|
||||
rswtrUsqty += Number(guideStat.ruseFcltUtztnQnt) || 0;
|
||||
altUswtrUtztnQnt += Number(guideStat.splyUswtrUtztnQnt) || 0;
|
||||
})
|
||||
rswtDetailList.push({
|
||||
...item,
|
||||
rswtAltSum: item.rswtrUsqty + item.altUswtrUtztnQnt,
|
||||
rswtAltSum: rswtrUsqty + altUswtrUtztnQnt,
|
||||
rswtrUsqty,
|
||||
altUswtrUtztnQnt,
|
||||
utztnUsgCd: utztnUsgArray.join(', '),
|
||||
anlOperCst: Math.round(Number(item.anlOperCst) / 1000000),
|
||||
})
|
||||
});
|
||||
const excelDetailData = excelRswtStat(rswtDetailList,rswtBdstType);
|
||||
const excelDetailData = excelRswtStat(rswtDetailList);
|
||||
set((state: rswtStatState) => ({
|
||||
rswtStat: {
|
||||
...state.rswtStat,
|
||||
@@ -209,4 +237,4 @@ export const rswtStatActionsExport: (set: any) => rswtStatActions = (
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user