From 7377f7b663b590676cbda1f6e04876406c3883f6 Mon Sep 17 00:00:00 2001 From: Hyojin Ahn Date: Mon, 22 Jun 2026 15:05:51 -0400 Subject: [PATCH] =?UTF-8?q?CS=20=ED=99=88=20=ED=99=94=EB=A9=B4=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../erp/controller/CustomerController.java | 21 ++++++++++++++++++- .../erp/dto/CustomerSummaryResponseDto.java | 19 +++++++++++++++++ .../erp/repository/CustomerRepository.java | 9 +++++++- .../com/goi/erp/service/CustomerService.java | 17 ++++++++++++++- 4 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/goi/erp/dto/CustomerSummaryResponseDto.java diff --git a/src/main/java/com/goi/erp/controller/CustomerController.java b/src/main/java/com/goi/erp/controller/CustomerController.java index 694aeda..e80df5e 100644 --- a/src/main/java/com/goi/erp/controller/CustomerController.java +++ b/src/main/java/com/goi/erp/controller/CustomerController.java @@ -5,6 +5,7 @@ import com.goi.erp.common.permission.PermissionSet; import com.goi.erp.dto.CustomerDailyOrderResponseDto; import com.goi.erp.dto.CustomerRequestDto; import com.goi.erp.dto.CustomerResponseDto; +import com.goi.erp.dto.CustomerSummaryResponseDto; import com.goi.erp.service.CustomerDailyOrderService; import com.goi.erp.service.CustomerService; import com.goi.erp.token.PermissionAuthenticationToken; @@ -85,6 +86,24 @@ public class CustomerController { return ResponseEntity.ok(customerService.getAllCustomers(p, s)); } + // SUMMARY (CS 홈: 전체 고객 수 + 오늘 추가된 고객 수) + @GetMapping("/summary") + public ResponseEntity getCustomerSummary() { + // 권한 체크 + PermissionAuthenticationToken auth = (PermissionAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); + + if (auth == null || auth.getPermissionSet() == null) { + throw new AccessDeniedException("Permission information is missing"); + } + + PermissionSet permissionSet = auth.getPermissionSet(); + if (!PermissionChecker.canReadCRMAll(permissionSet)) { + throw new AccessDeniedException("You do not have permission to read all CRM data"); + } + + return ResponseEntity.ok(customerService.getCustomerSummary()); + } + // READ ONE @GetMapping("/uuid/{uuid}") public ResponseEntity getCustomer(@PathVariable UUID uuid) { @@ -206,4 +225,4 @@ public class CustomerController { dailyOrderService.getDailyOrderByCustomerNo(cusNo, orderDate, jobType) ); } -} +} \ No newline at end of file diff --git a/src/main/java/com/goi/erp/dto/CustomerSummaryResponseDto.java b/src/main/java/com/goi/erp/dto/CustomerSummaryResponseDto.java new file mode 100644 index 0000000..c8c64df --- /dev/null +++ b/src/main/java/com/goi/erp/dto/CustomerSummaryResponseDto.java @@ -0,0 +1,19 @@ +package com.goi.erp.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class CustomerSummaryResponseDto { + + // 전체 고객 수 + private long totalCount; + + // 오늘 추가된 고객 수 (cus_created_at 기준) + private long todayCount; +} \ No newline at end of file diff --git a/src/main/java/com/goi/erp/repository/CustomerRepository.java b/src/main/java/com/goi/erp/repository/CustomerRepository.java index 375de11..f316c41 100644 --- a/src/main/java/com/goi/erp/repository/CustomerRepository.java +++ b/src/main/java/com/goi/erp/repository/CustomerRepository.java @@ -7,6 +7,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.time.LocalDate; import java.util.Optional; import java.util.UUID; @@ -19,4 +20,10 @@ public interface CustomerRepository extends JpaRepository { Optional findByCusNo(String cusNo); boolean existsByCusNo(String cusNo); -} + + // 현재(활성) 고객 수: cus_status = 'A' + long countByCusStatus(String cusStatus); + + // 오늘 추가된 고객 수: cus_contract_date = 오늘 + long countByCusContractDate(LocalDate cusContractDate); +} \ No newline at end of file diff --git a/src/main/java/com/goi/erp/service/CustomerService.java b/src/main/java/com/goi/erp/service/CustomerService.java index 4a69669..459887c 100644 --- a/src/main/java/com/goi/erp/service/CustomerService.java +++ b/src/main/java/com/goi/erp/service/CustomerService.java @@ -2,6 +2,7 @@ package com.goi.erp.service; import com.goi.erp.dto.CustomerRequestDto; import com.goi.erp.dto.CustomerResponseDto; +import com.goi.erp.dto.CustomerSummaryResponseDto; import com.goi.erp.entity.Customer; import com.goi.erp.entity.EntityChangeLog; import com.goi.erp.repository.CustomerRepository; @@ -87,6 +88,20 @@ public class CustomerService { return customers.map(this::mapToDto); // 기존 mapToDto 사용 } + // CS 홈 요약: 현재(활성) 고객 수 + 오늘 추가된 고객 수 + public CustomerSummaryResponseDto getCustomerSummary() { + // 현재 고객 = cus_status 'A' + long total = customerRepository.countByCusStatus("A"); + + // 오늘 추가 = cus_contract_date 가 오늘 (서버 로컬 타임존 기준) + long todayCount = customerRepository.countByCusContractDate(LocalDate.now()); + + return CustomerSummaryResponseDto.builder() + .totalCount(total) + .todayCount(todayCount) + .build(); + } + public CustomerResponseDto getCustomerByUuid(UUID uuid) { Customer customer = customerRepository.findByCusUuid(uuid) .orElseThrow(() -> new RuntimeException("Customer not found")); @@ -398,4 +413,4 @@ public class CustomerService { } -} +} \ No newline at end of file