[ST] - refactor: 입력 11-1 운영데이터 가져오기 기능 추가
This commit is contained in:
@@ -186,10 +186,10 @@ function mapListToGridRows<T extends { verificationResult?: SewageExcretaSlurgeV
|
||||
});
|
||||
}
|
||||
|
||||
const SewageExcretaSlurgeInpTabList = [
|
||||
SlurgeProcessingFacStatusInpColumn,
|
||||
DigestorOperatingStatusInpColumn,
|
||||
SewageSlurgeProcessingFacStatusInpColumn,
|
||||
const SewageExcretaSlurgeInpTabList = [
|
||||
SlurgeProcessingFacStatusInpColumn,
|
||||
DigestorOperatingStatusInpColumn,
|
||||
SewageSlurgeProcessingFacStatusInpColumn,
|
||||
ExcretaSlurgeProcessingStatusInpColumn,
|
||||
] as const;
|
||||
|
||||
@@ -1342,18 +1342,18 @@ const SewageExcretaSlurgeInp = () => {
|
||||
noApplicable || !isSewageSlurgeFacTab
|
||||
? []
|
||||
: rowsForSubmit.map((row) =>
|
||||
buildSewageSlurgeProcessingFacStatusSaveItem(row, list),
|
||||
);
|
||||
buildSewageSlurgeProcessingFacStatusSaveItem(row, list),
|
||||
);
|
||||
const excretaSlurgeSubmitList =
|
||||
noApplicable || !isExcretaSlurgeTab
|
||||
? []
|
||||
: rowsForSubmit.map((row) =>
|
||||
buildExcretaSlurgeProcessingStatusSaveItem(row, list),
|
||||
);
|
||||
buildExcretaSlurgeProcessingStatusSaveItem(row, list),
|
||||
);
|
||||
const sewageSlurgeFacDeleteList = isSewageSlurgeFacTab
|
||||
? (deleteListByTab.get(tabKey) ?? [])
|
||||
.filter((row) => isPersistedArticleRowForTab(tabKey, row))
|
||||
.map((row) => buildSewageSlurgeProcessingFacStatusSaveItem(row, list))
|
||||
.filter((row) => isPersistedArticleRowForTab(tabKey, row))
|
||||
.map((row) => buildSewageSlurgeProcessingFacStatusSaveItem(row, list))
|
||||
: [];
|
||||
|
||||
if (
|
||||
@@ -1374,10 +1374,10 @@ const SewageExcretaSlurgeInp = () => {
|
||||
(isDigestorTab
|
||||
? SEWAGE_EXCRETA_DIGESTOR_OPERATING_STATS_CD
|
||||
: isSewageSlurgeFacTab
|
||||
? SEWAGE_EXCRETA_SEWAGE_SLURGE_FAC_STATUS_STATS_CD
|
||||
: isExcretaSlurgeTab
|
||||
? SEWAGE_EXCRETA_EXCRETA_SLURGE_PROCESSING_STATS_CD
|
||||
: SEWAGE_EXCRETA_SLURGE_PROCESSING_FAC_STATUS_STATS_CD);
|
||||
? SEWAGE_EXCRETA_SEWAGE_SLURGE_FAC_STATUS_STATS_CD
|
||||
: isExcretaSlurgeTab
|
||||
? SEWAGE_EXCRETA_EXCRETA_SLURGE_PROCESSING_STATS_CD
|
||||
: SEWAGE_EXCRETA_SLURGE_PROCESSING_FAC_STATUS_STATS_CD);
|
||||
|
||||
const verificationQuery = {
|
||||
...toInputSearchRegion(sidoListRef.current, lastSearchedValues),
|
||||
@@ -1429,32 +1429,32 @@ const SewageExcretaSlurgeInp = () => {
|
||||
setGlobalProgressLabel("일반 검증 진행 중...");
|
||||
const response = isSlurgeFacTab
|
||||
? await statisticsInputSewageExcretaSlurgeApi.submitSlurgeProcessingFacStatus({
|
||||
...submitRequestBase,
|
||||
userUuid: userInfo.userUnqId,
|
||||
submitList: slurgeSubmitList,
|
||||
})
|
||||
...submitRequestBase,
|
||||
userUuid: userInfo.userUnqId,
|
||||
submitList: slurgeSubmitList,
|
||||
})
|
||||
: isDigestorTab
|
||||
? await statisticsInputSewageExcretaSlurgeApi.submitDigestorOperatingStatus({
|
||||
? await statisticsInputSewageExcretaSlurgeApi.submitDigestorOperatingStatus({
|
||||
...submitRequestBase,
|
||||
userUuid: userInfo.userUnqId,
|
||||
submitList: digestorSubmitList,
|
||||
})
|
||||
: isSewageSlurgeFacTab
|
||||
? await statisticsInputSewageExcretaSlurgeApi.submitSewageSlurgeProcessingFacStatus(
|
||||
{
|
||||
...submitRequestBase,
|
||||
userUuid: userInfo.userUnqId,
|
||||
submitList: sewageSlurgeFacSubmitList,
|
||||
deleteList: sewageSlurgeFacDeleteList,
|
||||
},
|
||||
)
|
||||
: await statisticsInputSewageExcretaSlurgeApi.submitExcretaSlurgeProcessingStatus(
|
||||
{
|
||||
...submitRequestBase,
|
||||
userUuid: userInfo.userUnqId,
|
||||
submitList: excretaSlurgeSubmitList,
|
||||
},
|
||||
);
|
||||
: isSewageSlurgeFacTab
|
||||
? await statisticsInputSewageExcretaSlurgeApi.submitSewageSlurgeProcessingFacStatus(
|
||||
{
|
||||
...submitRequestBase,
|
||||
userUuid: userInfo.userUnqId,
|
||||
submitList: sewageSlurgeFacSubmitList,
|
||||
deleteList: sewageSlurgeFacDeleteList,
|
||||
},
|
||||
)
|
||||
: await statisticsInputSewageExcretaSlurgeApi.submitExcretaSlurgeProcessingStatus(
|
||||
{
|
||||
...submitRequestBase,
|
||||
userUuid: userInfo.userUnqId,
|
||||
submitList: excretaSlurgeSubmitList,
|
||||
},
|
||||
);
|
||||
|
||||
if (response.status !== "success") {
|
||||
alert(response.message ?? "데이터 제출 중 오류가 발생했습니다.");
|
||||
@@ -1535,7 +1535,58 @@ const SewageExcretaSlurgeInp = () => {
|
||||
};
|
||||
|
||||
const updateOperateDataButtonFunc = () => {
|
||||
console.log("운영 데이터 업데이트");
|
||||
void (async () => {
|
||||
if (!lastSearchedValues) {
|
||||
alert("먼저 조회를 진행해주세요.");
|
||||
return;
|
||||
}
|
||||
if (!(await confirm("자체발생량·함수율·자체 1차 처리량이 운영 데이터로 덮어씁니다."))) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
showGlobalProgress({ label: "운영 데이터 업데이트 중...", progress: 0 });
|
||||
const userInfo = await getUserInfo();
|
||||
const request = {
|
||||
statsYr: lastSearchedValues.year ?? "",
|
||||
ctpvNm: lastSearchedValues.sido ?? "",
|
||||
...toInputSearchRegion(sidoListRef.current, lastSearchedValues),
|
||||
userUuid: userInfo.userUnqId,
|
||||
};
|
||||
|
||||
const response =
|
||||
await statisticsInputSewageExcretaSlurgeApi.updateSlurgeProcessingFacStatusOperationData(
|
||||
request,
|
||||
);
|
||||
if (response.status !== "success") {
|
||||
alert(
|
||||
response.message ||
|
||||
"운영 데이터 업데이트 중 오류가 발생했습니다.",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
setGlobalProgress(50);
|
||||
const tabKey = SlurgeProcessingFacStatusInpColumn.tabKey;
|
||||
const param =
|
||||
searchParamRef.current ??
|
||||
buildSewageExcretaSlurgeSearchParam(lastSearchedValues);
|
||||
await loadActiveTabData(tabKey, param, lastSearchedValues, true, false);
|
||||
setGlobalProgress(100);
|
||||
alert("운영 데이터가 업데이트되었습니다.");
|
||||
} catch (error) {
|
||||
const message =
|
||||
error &&
|
||||
typeof error === "object" &&
|
||||
"response" in error
|
||||
? (error as { response?: { data?: { message?: string } } })
|
||||
.response?.data?.message
|
||||
: undefined;
|
||||
alert(message || "운영 데이터 업데이트 중 오류가 발생했습니다.");
|
||||
} finally {
|
||||
hideGlobalProgress();
|
||||
}
|
||||
})();
|
||||
};
|
||||
|
||||
const cnacelSubmitFunc = () => {
|
||||
@@ -1649,8 +1700,8 @@ const SewageExcretaSlurgeInp = () => {
|
||||
const saveList = noApplicable
|
||||
? []
|
||||
: rowsForSave.map((row) =>
|
||||
buildSlurgeProcessingFacStatusSaveItem(row, list),
|
||||
);
|
||||
buildSlurgeProcessingFacStatusSaveItem(row, list),
|
||||
);
|
||||
|
||||
if (!noApplicable && saveList.length === 0 && buildSubmitOkForToolbar(searchContextByTab.get(tabKey) ?? lastSearchedValues)) {
|
||||
alert("해당사항 없음을 체크해주세요.");
|
||||
@@ -1675,8 +1726,8 @@ const SewageExcretaSlurgeInp = () => {
|
||||
const saveList = noApplicable
|
||||
? []
|
||||
: rowsForSave.map((row) =>
|
||||
buildDigestorOperatingStatusSaveItem(row, list),
|
||||
);
|
||||
buildDigestorOperatingStatusSaveItem(row, list),
|
||||
);
|
||||
|
||||
if (!noApplicable && saveList.length === 0 && buildSubmitOkForToolbar(searchContextByTab.get(tabKey) ?? lastSearchedValues)) {
|
||||
alert("해당사항 없음을 체크해주세요.");
|
||||
@@ -1698,8 +1749,8 @@ const SewageExcretaSlurgeInp = () => {
|
||||
const saveList = noApplicable
|
||||
? []
|
||||
: rowsForSave.map((row) =>
|
||||
buildSewageSlurgeProcessingFacStatusSaveItem(row, list),
|
||||
);
|
||||
buildSewageSlurgeProcessingFacStatusSaveItem(row, list),
|
||||
);
|
||||
const deleteList = (deleteListByTab.get(tabKey) ?? [])
|
||||
.filter((row) => isPersistedArticleRowForTab(tabKey, row))
|
||||
.map((row) => buildSewageSlurgeProcessingFacStatusSaveItem(row, list));
|
||||
@@ -1728,8 +1779,8 @@ const SewageExcretaSlurgeInp = () => {
|
||||
const saveList = noApplicable
|
||||
? []
|
||||
: rowsForSave.map((row) =>
|
||||
buildExcretaSlurgeProcessingStatusSaveItem(row, list),
|
||||
);
|
||||
buildExcretaSlurgeProcessingStatusSaveItem(row, list),
|
||||
);
|
||||
|
||||
if (!noApplicable && saveList.length === 0 && buildSubmitOkForToolbar(searchContextByTab.get(tabKey) ?? lastSearchedValues)) {
|
||||
alert("해당사항 없음을 체크해주세요.");
|
||||
@@ -1781,17 +1832,17 @@ const SewageExcretaSlurgeInp = () => {
|
||||
const getCheckedItemIndexesFromGrid = (rowCount: number): number[] => {
|
||||
const gridView = getGridRef.current?.gridView as
|
||||
| {
|
||||
getCheckedItems?: () => number[];
|
||||
getCheckedRows?: () => number[];
|
||||
}
|
||||
getCheckedItems?: () => number[];
|
||||
getCheckedRows?: () => number[];
|
||||
}
|
||||
| undefined;
|
||||
|
||||
const checked =
|
||||
(typeof gridView?.getCheckedItems === "function"
|
||||
? gridView.getCheckedItems()
|
||||
: typeof gridView?.getCheckedRows === "function"
|
||||
? gridView.getCheckedRows()
|
||||
: []) ?? [];
|
||||
? gridView.getCheckedRows()
|
||||
: []) ?? [];
|
||||
|
||||
return checked.filter(
|
||||
(idx) => Number.isInteger(idx) && idx >= 0 && idx < rowCount,
|
||||
@@ -1863,10 +1914,10 @@ const SewageExcretaSlurgeInp = () => {
|
||||
checkedIndexes.length > 0
|
||||
? new Set(checkedIndexes)
|
||||
: new Set(
|
||||
currentRows
|
||||
.map((row, idx) => (isCheckedRow(row) ? idx : -1))
|
||||
.filter((idx) => idx >= 0),
|
||||
);
|
||||
currentRows
|
||||
.map((row, idx) => (isCheckedRow(row) ? idx : -1))
|
||||
.filter((idx) => idx >= 0),
|
||||
);
|
||||
|
||||
const removedRows = currentRows.filter((_, idx) => checkedIndexSet.has(idx));
|
||||
const nextRows = currentRows.filter((_, idx) => !checkedIndexSet.has(idx));
|
||||
@@ -2089,8 +2140,8 @@ const SewageExcretaSlurgeInp = () => {
|
||||
onValuesChange={setSearchValues}
|
||||
/>
|
||||
{showActionToolbarCard && (
|
||||
<div className="card !py-0">
|
||||
<div className="flex justify-end items-center gap-[0.6rem] m-[0.6rem]">
|
||||
<div className="card !py-0">
|
||||
<div className="flex justify-end items-center gap-[0.6rem] m-[0.6rem]">
|
||||
<VerificationResultButton
|
||||
VerificationResultButtonFunc={openVerificationHistoryDialog}
|
||||
isVerificationFailed={
|
||||
@@ -2107,19 +2158,19 @@ const SewageExcretaSlurgeInp = () => {
|
||||
updateOperateDataButtonFunc={updateOperateDataButtonFunc}
|
||||
/>
|
||||
)}
|
||||
{submitOk && <SubmitButton submitFunc={submitFunc} />}
|
||||
{submitOk && <SubmitButton submitFunc={submitFunc} />}
|
||||
</>
|
||||
)}
|
||||
{activeTabStatus?.lclgvSbmsnSttsCd === "2" && submitOk && inputPeriodEnterable && (
|
||||
<CancelSubmitButton cnacelSubmitFunc={cnacelSubmitFunc} />
|
||||
)}
|
||||
{showSaveInToolbar && <SaveButton saveFunc={saveFunc} />}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
{showSecondaryToolbarCard && (
|
||||
<div className="card !py-0">
|
||||
<div className="flex justify-end items-center gap-[0.6rem] m-[0.6rem]">
|
||||
<div className="card !py-0">
|
||||
<div className="flex justify-end items-center gap-[0.6rem] m-[0.6rem]">
|
||||
{showNotApplicableForActiveTab && (
|
||||
<NotApplicableCheckButton
|
||||
isCheck={isNotApplicableForActiveTab}
|
||||
@@ -2128,12 +2179,12 @@ const SewageExcretaSlurgeInp = () => {
|
||||
)}
|
||||
{showArticleEditButtons && (
|
||||
<>
|
||||
<AddArticleButton addArticleFunc={addArticleFunc} />
|
||||
<DeleteArticleButton deleteArticleFunc={deleteArticleFunc} />
|
||||
<AddArticleButton addArticleFunc={addArticleFunc} />
|
||||
<DeleteArticleButton deleteArticleFunc={deleteArticleFunc} />
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
{isLoading && (
|
||||
<div className="absolute inset-0 z-50 [data-theme='black']:bg-transparent rounded-lg p-10 flex justify-center items-center">
|
||||
|
||||
+14
@@ -22,6 +22,8 @@ import type {
|
||||
SewageSlurgeProcessingFacStatusSubmitRequest,
|
||||
SewageSlurgeProcessingFacStatusSubmitResponse,
|
||||
SlurgeProcessingFacStatusApiResponse,
|
||||
SlurgeProcessingFacStatusOperationDataUpdateRequest,
|
||||
SlurgeProcessingFacStatusOperationDataUpdateResponse,
|
||||
SlurgeProcessingFacStatusSaveRequest,
|
||||
SlurgeProcessingFacStatusSaveResponse,
|
||||
SlurgeProcessingFacStatusSubmitRequest,
|
||||
@@ -68,6 +70,18 @@ export class StatisticsInputSewageExcretaSlurgeApiService implements StatisticsI
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 찌꺼기(슬러지)처리시설현황 운영 데이터 업데이트 — ST00110001 */
|
||||
public async updateSlurgeProcessingFacStatusOperationData(
|
||||
request: SlurgeProcessingFacStatusOperationDataUpdateRequest,
|
||||
): Promise<SlurgeProcessingFacStatusOperationDataUpdateResponse> {
|
||||
const response =
|
||||
await stClient.put<SlurgeProcessingFacStatusOperationDataUpdateResponse>(
|
||||
`${BASE}/slurge-processing-fac-status/operation-data/update`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 소화조 운영현황 조회 — ST00110002 */
|
||||
public async getDigestorOperatingStatusList(
|
||||
params: SewageExcretaSlurgeRequestParams,
|
||||
|
||||
+21
@@ -205,6 +205,23 @@ export interface SlurgeProcessingFacStatusSubmitResponse {
|
||||
};
|
||||
}
|
||||
|
||||
/** ST00110001 운영 데이터 업데이트 요청 */
|
||||
export interface SlurgeProcessingFacStatusOperationDataUpdateRequest {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
/** 도에서만 사용, 특·광역시는 빈 값 */
|
||||
sggNm?: string;
|
||||
sewerBzmnCd: string;
|
||||
userUuid: string;
|
||||
}
|
||||
|
||||
/** ST00110001 운영 데이터 업데이트 응답 */
|
||||
export interface SlurgeProcessingFacStatusOperationDataUpdateResponse {
|
||||
status: string;
|
||||
message?: string;
|
||||
data?: unknown | null;
|
||||
}
|
||||
|
||||
/**
|
||||
* ST00110002 조회 `data.digestorOperatingStatusList[]` 한 행.
|
||||
* `DigestorOperatingStatusInpColumn` fieldName과 동일 (`ctpvNm` 그리드 값은 `commonInfo.ctpvNm` 시도명).
|
||||
@@ -561,6 +578,10 @@ export interface StatisticsInputSewageExcretaSlurgeService {
|
||||
submitSlurgeProcessingFacStatus(
|
||||
request: SlurgeProcessingFacStatusSubmitRequest,
|
||||
): Promise<SlurgeProcessingFacStatusSubmitResponse>;
|
||||
/** 찌꺼기(슬러지)처리시설현황 운영 데이터 업데이트 — ST00110001 */
|
||||
updateSlurgeProcessingFacStatusOperationData(
|
||||
request: SlurgeProcessingFacStatusOperationDataUpdateRequest,
|
||||
): Promise<SlurgeProcessingFacStatusOperationDataUpdateResponse>;
|
||||
/** 소화조 운영현황 조회 — ST00110002 */
|
||||
getDigestorOperatingStatusList(
|
||||
params: SewageExcretaSlurgeRequestParams,
|
||||
|
||||
Reference in New Issue
Block a user