diff --git a/src/main/java/net/jwsi/jcms/vpp/api/ApiClient.java b/src/main/java/net/jwsi/jcms/vpp/api/ApiClient.java index 82aef2c..507ef27 100644 --- a/src/main/java/net/jwsi/jcms/vpp/api/ApiClient.java +++ b/src/main/java/net/jwsi/jcms/vpp/api/ApiClient.java @@ -1,6 +1,7 @@ package net.jwsi.jcms.vpp.api; import lombok.RequiredArgsConstructor; +import net.jwsi.jcms.vpp.provider.ProviderDto; import net.jwsi.jcms.vpp.station.StationDto; import org.springframework.core.ParameterizedTypeReference; import org.springframework.stereotype.Component; @@ -30,4 +31,17 @@ public class ApiClient { .retrieve() .body(new ParameterizedTypeReference>>() {}); } + + public ApiResponse> fetchProviders(String baseUrl, String token) { + URI uri = UriComponentsBuilder.fromUriString(baseUrl) + .path("/api/provider/list") + .build() + .toUri(); + + return restClient.get() + .uri(uri) + .header("Authorization", "Bearer " + token) + .retrieve() + .body(new ParameterizedTypeReference>>() {}); + } } \ No newline at end of file diff --git a/src/main/java/net/jwsi/jcms/vpp/provider/Provider.java b/src/main/java/net/jwsi/jcms/vpp/provider/Provider.java index 7d4351c..587819f 100644 --- a/src/main/java/net/jwsi/jcms/vpp/provider/Provider.java +++ b/src/main/java/net/jwsi/jcms/vpp/provider/Provider.java @@ -1,5 +1,6 @@ package net.jwsi.jcms.vpp.provider; +import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Id; import lombok.Getter; @@ -7,26 +8,51 @@ import lombok.NoArgsConstructor; import lombok.Setter; import net.jwsi.jcms.base.BaseStEntity; -import java.time.LocalDateTime; - @Getter @Setter @NoArgsConstructor @Entity(name="vpp_provider") public class Provider extends BaseStEntity { @Id + @Column(name="provider_id") private String providerId; + + @Column(name="PROVIDER_NM") private String providerNm; + + @Column(name="biz_tax_id") private String bizTaxId; + + @Column(name="CEO") private String ceo; + + @Column(name="TEL") private String tel; + + @Column(name="FAX") private String fax; + + @Column(name="EMAIL") private String email; + + @Column(name="MGR_NM") private String mgrNm; + + @Column(name="MGR_TEL") private String mgrTel; + + @Column(name="EMGNCY_TEL") private String emgncyTel; + + @Column(name="ZIP_CODE") private String zipCode; + + @Column(name = "ADDR_RD_M") private String addrRdM; + + @Column(name = "ADDR_RD_D") private String addrRdD; + + @Column(name="REMARK") private String remark; } diff --git a/src/main/java/net/jwsi/jcms/vpp/provider/ProviderController.java b/src/main/java/net/jwsi/jcms/vpp/provider/ProviderController.java index 5ca0bb8..14052c5 100644 --- a/src/main/java/net/jwsi/jcms/vpp/provider/ProviderController.java +++ b/src/main/java/net/jwsi/jcms/vpp/provider/ProviderController.java @@ -1,13 +1,62 @@ package net.jwsi.jcms.vpp.provider; +import lombok.extern.slf4j.Slf4j; import net.jwsi.jcms.base.BaseController; import net.jwsi.jcms.exception.JsonDataException; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import java.util.List; +import java.util.Map; +@Slf4j +@Controller +@RequestMapping("/${jcms.manager-path:system}/provider/") public class ProviderController extends BaseController { - public ProviderController(ProviderService service) { + private final ProviderService providerService; + private final String path = "/system/provider/"; + + public ProviderController(ProviderService service, ProviderService providerService) { super(service); + this.providerService = providerService; + } + + @GetMapping("list") + public String list() { + return path + "list"; + } + + @PostMapping("list.json") + @ResponseBody + public Map list(Provider provider) { + return svcSelectList(provider); + } + + @PostMapping("view.json") + @ResponseBody + public Map viewData(Provider provider) throws JsonDataException { + return svcSelectOne(provider); + } + + @PostMapping("insert.json") + @ResponseBody + public Map insert(Provider provider) throws JsonDataException { + return svcInsert(provider); + } + + @PostMapping("update.json") + @ResponseBody + public Map update(Provider provider) throws JsonDataException { + return svcUpdate(provider); + } + + @PostMapping("delete.json") + @ResponseBody + public Map delete(Provider provider) throws JsonDataException { + return svcDelete(provider.getProviderId()); } @Override diff --git a/src/main/java/net/jwsi/jcms/vpp/provider/ProviderDto.java b/src/main/java/net/jwsi/jcms/vpp/provider/ProviderDto.java index c2ab723..e8c7928 100644 --- a/src/main/java/net/jwsi/jcms/vpp/provider/ProviderDto.java +++ b/src/main/java/net/jwsi/jcms/vpp/provider/ProviderDto.java @@ -18,4 +18,17 @@ public class ProviderDto { private String email; private String zipCode; private String addr; + + public Provider toEntity() { + Provider provider = new Provider(); + provider.setProviderId(this.providerId); + provider.setProviderNm(this.providerNm); + provider.setBizTaxId(this.bizTaxId); + provider.setCeo(this.ceo); + provider.setTel(this.tel); + provider.setFax(this.fax); + provider.setEmail(this.email); + provider.setZipCode(this.zipCode); + return provider; + } } diff --git a/src/main/java/net/jwsi/jcms/vpp/provider/ProviderRepository.java b/src/main/java/net/jwsi/jcms/vpp/provider/ProviderRepository.java index 4d0f209..af62995 100644 --- a/src/main/java/net/jwsi/jcms/vpp/provider/ProviderRepository.java +++ b/src/main/java/net/jwsi/jcms/vpp/provider/ProviderRepository.java @@ -1,6 +1,8 @@ package net.jwsi.jcms.vpp.provider; import net.jwsi.jcms.base.BaseRecStRepository; +import org.springframework.stereotype.Repository; +@Repository public interface ProviderRepository extends BaseRecStRepository { } diff --git a/src/main/java/net/jwsi/jcms/vpp/provider/ProviderService.java b/src/main/java/net/jwsi/jcms/vpp/provider/ProviderService.java index c0a9663..db0648e 100644 --- a/src/main/java/net/jwsi/jcms/vpp/provider/ProviderService.java +++ b/src/main/java/net/jwsi/jcms/vpp/provider/ProviderService.java @@ -1,16 +1,24 @@ package net.jwsi.jcms.vpp.provider; +import jakarta.transaction.Transactional; import lombok.extern.slf4j.Slf4j; import net.jwsi.jcms.base.BaseService; import net.jwsi.jcms.base.EnumSqlType; +import net.jwsi.jcms.utils.HttpUtil; +import net.jwsi.jcms.utils.LoginUtil; import net.jwsi.jcms.vpp.api.ApiClient; import net.jwsi.jcms.vpp.api.ApiResponse; +import net.jwsi.jcms.vpp.station.Station; +import net.jwsi.jcms.vpp.station.StationDto; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Page; import org.springframework.data.jpa.domain.Specification; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; +import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; @Slf4j @Service @@ -29,29 +37,61 @@ public class ProviderService extends BaseService> response = apiClient.fetchProviders(baseUrl, apiToken); + + if (response == null || !Integer.valueOf(200).equals(response.getCode())) { + String msg = (response != null) ? response.getMessage() : "응답 없음"; + throw new RuntimeException("API 호출 실패: " + msg); + } + + List dtoList = response.getData(); + if (dtoList == null || dtoList.isEmpty()) { + log.info("가져온 충전사업자 데이터가 없습니다."); + } + + List entityList = dtoList.stream() + .map(ProviderDto::toEntity) + .collect(Collectors.toList()); + + List savedProviders = super.repository.saveAll(entityList); + + log.info("총 {}건의 충전사업자 데이터가 DB에 동기화되었습니다.", savedProviders.size()); + + } + + @Override protected Integer getUserId() { - return null; + return HttpUtil.getUserId(); } @Override protected String getUserName(Integer id) { - return null; + return LoginUtil.getUserName(id); } @Override protected Provider newSearchParam(Provider provider) { - return null; + if (provider == null) { + provider = new Provider(); + } + return provider; } @Override protected EnumSqlType useSqlTyp() { - return null; + return EnumSqlType.SPECIFICATION; } @Override - protected Specification getSpecification(Provider provider) { - return null; + protected Specification getSpecification(Provider srch) { + if (srch == null) return null; + Specification rst = null; + rst = addWhere(rst, srch.getProviderId(), ProviderSpecification.providerId(srch.getProviderId())); + return rst; } @Override diff --git a/src/main/java/net/jwsi/jcms/vpp/provider/ProviderSpecification.java b/src/main/java/net/jwsi/jcms/vpp/provider/ProviderSpecification.java new file mode 100644 index 0000000..43ee557 --- /dev/null +++ b/src/main/java/net/jwsi/jcms/vpp/provider/ProviderSpecification.java @@ -0,0 +1,10 @@ +package net.jwsi.jcms.vpp.provider; + +import org.springframework.data.jpa.domain.Specification; + +public class ProviderSpecification { + + public static Specification providerId(String providerId) { + return (root, query, criteriaBuilder) -> criteriaBuilder.equal(root.get("providerId"), providerId); + } +} diff --git a/src/main/resources/templates/system/provider/list.html b/src/main/resources/templates/system/provider/list.html new file mode 100644 index 0000000..e69de29