diff --git a/src/main/doc/db/jcms_vpp_0.0.1.exerd b/src/main/doc/db/jcms_vpp_0.0.1.exerd new file mode 100644 index 0000000..ba3f63c Binary files /dev/null and b/src/main/doc/db/jcms_vpp_0.0.1.exerd differ diff --git a/src/main/doc/db/vpp.exerd b/src/main/doc/db/vpp.exerd new file mode 100644 index 0000000..9b77464 Binary files /dev/null and b/src/main/doc/db/vpp.exerd differ 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 95a4d61..96237e3 100644 --- a/src/main/java/net/jwsi/jcms/vpp/api/ApiClient.java +++ b/src/main/java/net/jwsi/jcms/vpp/api/ApiClient.java @@ -1,7 +1,7 @@ package net.jwsi.jcms.vpp.api; import lombok.RequiredArgsConstructor; -import net.jwsi.jcms.vpp.charger.Chgr; +import net.jwsi.jcms.vpp.charger.ChgrResponseDto; import net.jwsi.jcms.vpp.provider.ProviderDto; import net.jwsi.jcms.vpp.station.StationDto; import org.springframework.core.ParameterizedTypeReference; @@ -46,16 +46,17 @@ public class ApiClient { .body(new ParameterizedTypeReference>>() {}); } - public ApiResponse> fetchChgr(String baseUrl, String token) { + public ApiResponse> fetchChgr(String baseUrl, String token) { URI uri = UriComponentsBuilder.fromUriString(baseUrl) - .path("/api/charge/list") + .path("/api/charger/list") .build() .toUri(); return restClient.post() .uri(uri) .header("Authorization", "Bearer " + token) + .body(Collections.emptyMap()) .retrieve() - .body(new ParameterizedTypeReference>>() {}); + .body(new ParameterizedTypeReference>>() {}); } } \ No newline at end of file diff --git a/src/main/java/net/jwsi/jcms/vpp/charger/Chgr.java b/src/main/java/net/jwsi/jcms/vpp/charger/Chgr.java index e0b1271..78faa66 100644 --- a/src/main/java/net/jwsi/jcms/vpp/charger/Chgr.java +++ b/src/main/java/net/jwsi/jcms/vpp/charger/Chgr.java @@ -1,5 +1,6 @@ package net.jwsi.jcms.vpp.charger; +import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Id; import lombok.Getter; @@ -15,13 +16,15 @@ import net.jwsi.jcms.base.BaseStEntity; @Entity(name = "vpp_chgr") public class Chgr extends BaseStEntity { @Id + @Column(name = "CHGR_ID") private String chgrId; //충전기 id(pk) + @Column(name = "PROVIDER_ID") private String providerId; //충전사업자 id(pk) @Id private String stId; //충전소 id(pk) @Id private String stNm; //충전소 명 private String chgrNm; //충전기 명 - private String speedTpCd; //충전기속도 코드 - private String chgrTypeCd; //충전기타입 코드 + private String speedTp; //충전기속도 코드 + private String chgrTp; //충전기타입 코드 } diff --git a/src/main/java/net/jwsi/jcms/vpp/charger/ChgrController.java b/src/main/java/net/jwsi/jcms/vpp/charger/ChgrController.java index be6d530..decdb85 100644 --- a/src/main/java/net/jwsi/jcms/vpp/charger/ChgrController.java +++ b/src/main/java/net/jwsi/jcms/vpp/charger/ChgrController.java @@ -1,16 +1,62 @@ package net.jwsi.jcms.vpp.charger; +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; @Controller +@Slf4j +@RequestMapping("/cms/chgr") public class ChgrController extends BaseController { + private final String path = "/system/chgr/"; - public ChgrController(ChgrService service) { + private final ChgrService chgrService; + + + public ChgrController(ChgrService service, ChgrService chgrService) { super(service); + this.chgrService = chgrService; + } + @GetMapping("list") + public String list(){ + return path+"list"; + } + @PostMapping("list.json") + @ResponseBody + public Map list(Chgr chgr){ + return svcSelectList(chgr); + } + @PostMapping("view.json") + @ResponseBody + public Map viewData(Chgr chgr) throws JsonDataException { + return svcSelectOne(chgr); + } + + @PostMapping("insert.json") + @ResponseBody + public Map insert(Chgr chgr) throws JsonDataException { + return svcInsert(chgr); + } + + @PostMapping("update.json") + @ResponseBody + public Map update(Chgr chgr) throws JsonDataException { + return svcUpdate(chgr); + } + + @PostMapping("delete.json") + @ResponseBody + public Map delete(Chgr chgr) throws JsonDataException { + return svcDelete(chgr.getChgrId()); } @Override diff --git a/src/main/java/net/jwsi/jcms/vpp/charger/ResponseDto.java b/src/main/java/net/jwsi/jcms/vpp/charger/ChgrResponseDto.java similarity index 79% rename from src/main/java/net/jwsi/jcms/vpp/charger/ResponseDto.java rename to src/main/java/net/jwsi/jcms/vpp/charger/ChgrResponseDto.java index 811c419..1eb8eb7 100644 --- a/src/main/java/net/jwsi/jcms/vpp/charger/ResponseDto.java +++ b/src/main/java/net/jwsi/jcms/vpp/charger/ChgrResponseDto.java @@ -5,14 +5,14 @@ import lombok.Setter; @Getter @Setter -public class ResponseDto { +public class ChgrResponseDto { private String providerId; private String stId; private String stNm; private String chgrId; private String chgrNm; private String speedTp; - private String chgrType; + private String chgrTp; private double gpsXpos; private double gpsYpos; private String locInfo; @@ -24,11 +24,12 @@ public class ResponseDto { public Chgr toEntity(){ Chgr chgr = new Chgr(); chgr.setChgrId(this.chgrId); + chgr.setProviderId(this.providerId); chgr.setStId(this.stId); chgr.setStNm(this.stNm); chgr.setChgrNm(this.chgrNm); - chgr.setSpeedTpCd(this.speedTp); - chgr.setChgrTypeCd(this.chgrType); + chgr.setSpeedTp(this.speedTp); + chgr.setChgrTp(this.chgrTp); return chgr; } } diff --git a/src/main/java/net/jwsi/jcms/vpp/charger/ChgrService.java b/src/main/java/net/jwsi/jcms/vpp/charger/ChgrService.java index 6199322..2039473 100644 --- a/src/main/java/net/jwsi/jcms/vpp/charger/ChgrService.java +++ b/src/main/java/net/jwsi/jcms/vpp/charger/ChgrService.java @@ -1,17 +1,22 @@ package net.jwsi.jcms.vpp.charger; +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 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.List; +import java.util.stream.Collectors; + @Service @Slf4j public class ChgrService extends BaseService { @@ -26,7 +31,30 @@ public class ChgrService extends BaseService { super(repository); this.apiClient = apiClient; } + @Transactional + @Scheduled(cron = "0 0 0 * * *") + public void getCharger() { + ApiResponse> response = apiClient.fetchChgr(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(ChgrResponseDto::toEntity) + .collect(Collectors.toList()); + + List savedStations = super.repository.saveAll(entityList); + + log.info("총 {}건의 충전소 데이터가 DB에 동기화되었습니다.", savedStations.size()); + + } @Override protected Integer getUserId() { diff --git a/src/main/java/net/jwsi/jcms/vpp/station/Station.java b/src/main/java/net/jwsi/jcms/vpp/station/Station.java index 480ab1f..11ce609 100644 --- a/src/main/java/net/jwsi/jcms/vpp/station/Station.java +++ b/src/main/java/net/jwsi/jcms/vpp/station/Station.java @@ -15,7 +15,7 @@ import net.jwsi.jcms.base.BaseStEntity; public class Station extends BaseStEntity { @Id - @Column(name = "st_id") + @Column(name = "ST_ID") private String stationId; @Column(name = "PROVIDER_ID") @@ -36,19 +36,19 @@ public class Station extends BaseStEntity { @Column(name = "ADDR_LD_D") private String addrLdD; - @Column(name = "st_facil_tp_cd") + @Column(name = "ST_FACIL_TP_CD") private String stFacilTpCd; - @Column(name = "st_facil_d_tp_cd") + @Column(name = "ST_FACIL_D_TP_CD") private String stFacilDTpCd; - @Column(name = "parking_fee_yn") + @Column(name = "PARKING_FEE_YN") private String parkingFeeYn; @Column(name = "PARKING_FEE_DETL") private String parkingFeeDetl; - @Column(name = "pnu_no") + @Column(name = "PNU_NO") private String pnuNo; @Column(name = "PNU_DO_NM") diff --git a/src/main/resources/templates/system/chgr/list.html b/src/main/resources/templates/system/chgr/list.html new file mode 100644 index 0000000..dc4c4a3 --- /dev/null +++ b/src/main/resources/templates/system/chgr/list.html @@ -0,0 +1,233 @@ + + + +
+
+
+
+
+
+
+ 충전사업자 ID + +
+
+
+
+ 충전소 ID + +
+
+
+
+ 충전기 ID + +
+
+
+
+ 충전소 명 + +
+
+
+
+ 충전기 명 + +
+
+
+
+ 충전기속도 + +
+
+
+
+ 충전기타입 + +
+
+
+
+
+
+
+ + + + +
+
+
+
+
+ +
+
+
+
+
+
+
+ +
+ +