From 3f52596a8bb988260829be9c2347acf0dd15ea02 Mon Sep 17 00:00:00 2001 From: GA Pro Date: Fri, 22 May 2026 01:41:26 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=A0=84=EC=B2=B4=20=EB=A9=94=EB=89=B4?= =?UTF-8?q?=20=EC=A0=90=EA=B2=80=20=E2=80=94=20=ED=9A=8C=EA=B3=84=EB=B6=84?= =?UTF-8?q?=EA=B0=9C/KPI=20=EB=A7=A4=ED=8D=BC=20=EC=BB=AC=EB=9F=BC=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20+=20=EA=B2=B0=EC=9E=AC=20mine/pending=20?= =?UTF-8?q?=EC=97=94=EB=93=9C=ED=8F=AC=EC=9D=B8=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 전체 화면 API 점검(85종) 중 발견한 오류 수정: - ContractAccountingEntryMapper: ac.contract_no 미존재 -> ac.policy_no AS contract_no (contract 테이블 컬럼은 policy_no. 데이터 적재 후 표면화된 버그) - KpiMapper: mv_*.refreshed_at 가 now() 기반 timestamptz 인데 VO는 LocalDateTime -> refreshed_at::timestamp 캐스팅 (monthly/org/cumulative/retention 4종) - ApprovalController/Service: /requests/mine, /requests/pending 엔드포인트 부재로 /requests/{requestId} 에 매칭돼 400 -> 두 엔드포인트 신규 추가 검증: 전체 엔드포인트 ERROR 0건. 정산 배치 데이터 + KPI MV 새로고침으로 KPI 대시보드 4화면(월별/조직별/누적/유지율) 정상 표시. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../controller/approval/ApprovalController.java | 14 ++++++++++++++ .../ga/api/service/approval/ApprovalService.java | 14 ++++++++++++++ .../accounting/ContractAccountingEntryMapper.xml | 6 +++--- .../src/main/resources/mapper/kpi/KpiMapper.xml | 8 ++++---- 4 files changed, 35 insertions(+), 7 deletions(-) diff --git a/ga-api/src/main/java/com/ga/api/controller/approval/ApprovalController.java b/ga-api/src/main/java/com/ga/api/controller/approval/ApprovalController.java index bf196a0..03c532d 100644 --- a/ga-api/src/main/java/com/ga/api/controller/approval/ApprovalController.java +++ b/ga-api/src/main/java/com/ga/api/controller/approval/ApprovalController.java @@ -77,6 +77,20 @@ public class ApprovalController { return ApiResponse.ok(service.listRequests(param)); } + @GetMapping("/requests/mine") + @RequirePermission(menu = "APPROVAL", perm = "READ") + public ApiResponse> myRequests( + @ModelAttribute ApprovalRequestSearchParam param) { + return ApiResponse.ok(service.myRequests(param)); + } + + @GetMapping("/requests/pending") + @RequirePermission(menu = "APPROVAL", perm = "READ") + public ApiResponse> pendingRequests( + @ModelAttribute ApprovalRequestSearchParam param) { + return ApiResponse.ok(service.pendingRequests(param)); + } + @GetMapping("/requests/{requestId}") @RequirePermission(menu = "APPROVAL", perm = "READ") public ApiResponse detailRequest(@PathVariable Long requestId) { diff --git a/ga-api/src/main/java/com/ga/api/service/approval/ApprovalService.java b/ga-api/src/main/java/com/ga/api/service/approval/ApprovalService.java index 1bd44f4..4d4e4c3 100644 --- a/ga-api/src/main/java/com/ga/api/service/approval/ApprovalService.java +++ b/ga-api/src/main/java/com/ga/api/service/approval/ApprovalService.java @@ -100,6 +100,20 @@ public class ApprovalService { return PageResponse.of(requestMapper.selectList(param)); } + /** 내가 상신한 결재 요청 */ + public PageResponse myRequests(ApprovalRequestSearchParam param) { + param.setRequestedBy(SecurityUtil.getCurrentUserId()); + param.startPage(); + return PageResponse.of(requestMapper.selectList(param)); + } + + /** 진행 중(PENDING) 결재 요청 */ + public PageResponse pendingRequests(ApprovalRequestSearchParam param) { + param.setStatus("PENDING"); + param.startPage(); + return PageResponse.of(requestMapper.selectList(param)); + } + public ApprovalRequestResp detailRequest(Long requestId) { ApprovalRequestResp resp = requestMapper.selectById(requestId); if (resp == null) throw new BizException(ErrorCode.NOT_FOUND); diff --git a/ga-core/src/main/resources/mapper/accounting/ContractAccountingEntryMapper.xml b/ga-core/src/main/resources/mapper/accounting/ContractAccountingEntryMapper.xml index af22881..c5ced9e 100644 --- a/ga-core/src/main/resources/mapper/accounting/ContractAccountingEntryMapper.xml +++ b/ga-core/src/main/resources/mapper/accounting/ContractAccountingEntryMapper.xml @@ -10,7 +10,7 @@ cae.entry_id, cae.contract_id, - ac.contract_no, + ac.policy_no AS contract_no, cae.payment_id, a.agent_id, a.agent_name, @@ -45,8 +45,8 @@ AND cae.journal_no IS NULL - AND (ac.contract_no LIKE CONCAT('%', #{searchKeyword}, '%') - OR a.agent_name LIKE CONCAT('%', #{searchKeyword}, '%')) + AND (ac.policy_no LIKE CONCAT('%', #{searchKeyword}, '%') + OR a.agent_name LIKE CONCAT('%', #{searchKeyword}, '%')) ORDER BY cae.entry_date DESC, cae.entry_id DESC diff --git a/ga-core/src/main/resources/mapper/kpi/KpiMapper.xml b/ga-core/src/main/resources/mapper/kpi/KpiMapper.xml index 8f5f03b..e2d9248 100644 --- a/ga-core/src/main/resources/mapper/kpi/KpiMapper.xml +++ b/ga-core/src/main/resources/mapper/kpi/KpiMapper.xml @@ -32,7 +32,7 @@ total_tax, total_net, total_incentive, - refreshed_at + refreshed_at::timestamp AS refreshed_at FROM mv_monthly_summary @@ -62,7 +62,7 @@ total_chargeback, total_gross, total_net, - refreshed_at + refreshed_at::timestamp AS refreshed_at FROM mv_org_summary AND org_id = #{orgId} @@ -91,7 +91,7 @@ retained_25m, retention_rate_13m, retention_rate_25m, - refreshed_at + refreshed_at::timestamp AS refreshed_at FROM mv_retention AND carrier_id = #{carrierId} @@ -125,7 +125,7 @@ cum_chargeback, cum_override, cum_incentive, - refreshed_at + refreshed_at::timestamp AS refreshed_at FROM mv_cumulative