충전사업자 소스 정리

This commit is contained in:
2026-07-28 15:14:01 +09:00
parent 8d29a742c2
commit 802b3e3224
8 changed files with 163 additions and 9 deletions
@@ -1,6 +1,7 @@
package net.jwsi.jcms.vpp.api; package net.jwsi.jcms.vpp.api;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import net.jwsi.jcms.vpp.provider.ProviderDto;
import net.jwsi.jcms.vpp.station.StationDto; import net.jwsi.jcms.vpp.station.StationDto;
import org.springframework.core.ParameterizedTypeReference; import org.springframework.core.ParameterizedTypeReference;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -30,4 +31,17 @@ public class ApiClient {
.retrieve() .retrieve()
.body(new ParameterizedTypeReference<ApiResponse<List<StationDto>>>() {}); .body(new ParameterizedTypeReference<ApiResponse<List<StationDto>>>() {});
} }
public ApiResponse<List<ProviderDto>> 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<ApiResponse<List<ProviderDto>>>() {});
}
} }
@@ -1,5 +1,6 @@
package net.jwsi.jcms.vpp.provider; package net.jwsi.jcms.vpp.provider;
import jakarta.persistence.Column;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.Id; import jakarta.persistence.Id;
import lombok.Getter; import lombok.Getter;
@@ -7,26 +8,51 @@ import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import net.jwsi.jcms.base.BaseStEntity; import net.jwsi.jcms.base.BaseStEntity;
import java.time.LocalDateTime;
@Getter @Getter
@Setter @Setter
@NoArgsConstructor @NoArgsConstructor
@Entity(name="vpp_provider") @Entity(name="vpp_provider")
public class Provider extends BaseStEntity { public class Provider extends BaseStEntity {
@Id @Id
@Column(name="provider_id")
private String providerId; private String providerId;
@Column(name="PROVIDER_NM")
private String providerNm; private String providerNm;
@Column(name="biz_tax_id")
private String bizTaxId; private String bizTaxId;
@Column(name="CEO")
private String ceo; private String ceo;
@Column(name="TEL")
private String tel; private String tel;
@Column(name="FAX")
private String fax; private String fax;
@Column(name="EMAIL")
private String email; private String email;
@Column(name="MGR_NM")
private String mgrNm; private String mgrNm;
@Column(name="MGR_TEL")
private String mgrTel; private String mgrTel;
@Column(name="EMGNCY_TEL")
private String emgncyTel; private String emgncyTel;
@Column(name="ZIP_CODE")
private String zipCode; private String zipCode;
@Column(name = "ADDR_RD_M")
private String addrRdM; private String addrRdM;
@Column(name = "ADDR_RD_D")
private String addrRdD; private String addrRdD;
@Column(name="REMARK")
private String remark; private String remark;
} }
@@ -1,13 +1,62 @@
package net.jwsi.jcms.vpp.provider; package net.jwsi.jcms.vpp.provider;
import lombok.extern.slf4j.Slf4j;
import net.jwsi.jcms.base.BaseController; import net.jwsi.jcms.base.BaseController;
import net.jwsi.jcms.exception.JsonDataException; 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.List;
import java.util.Map;
@Slf4j
@Controller
@RequestMapping("/${jcms.manager-path:system}/provider/")
public class ProviderController extends BaseController<Provider, String, ProviderRepository, ProviderService> { public class ProviderController extends BaseController<Provider, String, ProviderRepository, ProviderService> {
public ProviderController(ProviderService service) { private final ProviderService providerService;
private final String path = "/system/provider/";
public ProviderController(ProviderService service, ProviderService providerService) {
super(service); super(service);
this.providerService = providerService;
}
@GetMapping("list")
public String list() {
return path + "list";
}
@PostMapping("list.json")
@ResponseBody
public Map<String, Object> list(Provider provider) {
return svcSelectList(provider);
}
@PostMapping("view.json")
@ResponseBody
public Map<String, Object> viewData(Provider provider) throws JsonDataException {
return svcSelectOne(provider);
}
@PostMapping("insert.json")
@ResponseBody
public Map<String, Object> insert(Provider provider) throws JsonDataException {
return svcInsert(provider);
}
@PostMapping("update.json")
@ResponseBody
public Map<String, Object> update(Provider provider) throws JsonDataException {
return svcUpdate(provider);
}
@PostMapping("delete.json")
@ResponseBody
public Map<String, Object> delete(Provider provider) throws JsonDataException {
return svcDelete(provider.getProviderId());
} }
@Override @Override
@@ -18,4 +18,17 @@ public class ProviderDto {
private String email; private String email;
private String zipCode; private String zipCode;
private String addr; 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;
}
} }
@@ -1,6 +1,8 @@
package net.jwsi.jcms.vpp.provider; package net.jwsi.jcms.vpp.provider;
import net.jwsi.jcms.base.BaseRecStRepository; import net.jwsi.jcms.base.BaseRecStRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface ProviderRepository extends BaseRecStRepository<Provider, String> { public interface ProviderRepository extends BaseRecStRepository<Provider, String> {
} }
@@ -1,16 +1,24 @@
package net.jwsi.jcms.vpp.provider; package net.jwsi.jcms.vpp.provider;
import jakarta.transaction.Transactional;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.jwsi.jcms.base.BaseService; import net.jwsi.jcms.base.BaseService;
import net.jwsi.jcms.base.EnumSqlType; 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.ApiClient;
import net.jwsi.jcms.vpp.api.ApiResponse; 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.beans.factory.annotation.Value;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
@Slf4j @Slf4j
@Service @Service
@@ -29,29 +37,61 @@ public class ProviderService extends BaseService<Provider, String, ProviderRepos
this.apiClient = apiClient; this.apiClient = apiClient;
} }
@Transactional
@Scheduled(cron = "0 0 0 * * *")
public void getProviders() {
ApiResponse<List<ProviderDto>> 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<ProviderDto> dtoList = response.getData();
if (dtoList == null || dtoList.isEmpty()) {
log.info("가져온 충전사업자 데이터가 없습니다.");
}
List<Provider> entityList = dtoList.stream()
.map(ProviderDto::toEntity)
.collect(Collectors.toList());
List<Provider> savedProviders = super.repository.saveAll(entityList);
log.info("총 {}건의 충전사업자 데이터가 DB에 동기화되었습니다.", savedProviders.size());
}
@Override @Override
protected Integer getUserId() { protected Integer getUserId() {
return null; return HttpUtil.getUserId();
} }
@Override @Override
protected String getUserName(Integer id) { protected String getUserName(Integer id) {
return null; return LoginUtil.getUserName(id);
} }
@Override @Override
protected Provider newSearchParam(Provider provider) { protected Provider newSearchParam(Provider provider) {
return null; if (provider == null) {
provider = new Provider();
}
return provider;
} }
@Override @Override
protected EnumSqlType useSqlTyp() { protected EnumSqlType useSqlTyp() {
return null; return EnumSqlType.SPECIFICATION;
} }
@Override @Override
protected Specification<Provider> getSpecification(Provider provider) { protected Specification<Provider> getSpecification(Provider srch) {
return null; if (srch == null) return null;
Specification<Provider> rst = null;
rst = addWhere(rst, srch.getProviderId(), ProviderSpecification.providerId(srch.getProviderId()));
return rst;
} }
@Override @Override
@@ -0,0 +1,10 @@
package net.jwsi.jcms.vpp.provider;
import org.springframework.data.jpa.domain.Specification;
public class ProviderSpecification {
public static Specification<Provider> providerId(String providerId) {
return (root, query, criteriaBuilder) -> criteriaBuilder.equal(root.get("providerId"), providerId);
}
}