Skip to content

Commit 44bae2b

Browse files
authored
Merge pull request #63 from Capstone-QuarterBack/feature
Main Merge
2 parents 069853c + 83b3812 commit 44bae2b

94 files changed

Lines changed: 1763 additions & 219 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ dependencies {
5656
//validation
5757
implementation 'org.springframework.boot:spring-boot-starter-validation'
5858

59+
//mongoDB
60+
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
61+
5962
}
6063

6164
tasks.named('test') {

src/main/java/com/example/quaterback/api/domain/charger/constant/ChargerStatus.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33
public enum ChargerStatus {
44
OCCUPIED,
55
AVAILABLE,
6-
UNAVAILABLE
6+
UNAVAILABLE,
7+
FAULT
78
}

src/main/java/com/example/quaterback/api/domain/charger/entity/ChargerEntity.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,10 @@
33
import com.example.quaterback.api.domain.charger.constant.ChargerStatus;
44
import com.example.quaterback.api.domain.charger.domain.ChargerDomain;
55
import com.example.quaterback.api.domain.station.entity.ChargingStationEntity;
6-
import com.example.quaterback.api.domain.txinfo.entity.TransactionInfoEntity;
76
import jakarta.persistence.*;
87
import lombok.*;
98

109
import java.time.LocalDateTime;
11-
import java.util.ArrayList;
12-
import java.util.List;
1310

1411
@Entity
1512
@Table(name = "charger_info")
@@ -59,8 +56,8 @@ public void updateChargerStatus(ChargerStatus status) {
5956

6057
public void assignStation(ChargingStationEntity stationEntity) {
6158
station = stationEntity;
62-
if (!stationEntity.getChargerList().contains(this)) {
63-
stationEntity.getChargerList().add(this);
59+
if (!stationEntity.getChargerEntityList().contains(this)) {
60+
stationEntity.getChargerEntityList().add(this);
6461
}
6562
}
6663

src/main/java/com/example/quaterback/api/domain/charger/repository/ChargerRepository.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package com.example.quaterback.api.domain.charger.repository;
22

3+
import com.example.quaterback.api.domain.charger.constant.ChargerStatus;
34
import com.example.quaterback.api.domain.charger.domain.ChargerDomain;
45
import com.example.quaterback.api.domain.charger.entity.ChargerEntity;
6+
import com.example.quaterback.api.domain.station.constant.StationStatus;
7+
import com.example.quaterback.api.feature.statistics.dto.response.StatisticsData;
58

69
import java.util.List;
710

@@ -13,4 +16,7 @@ public interface ChargerRepository {
1316
List<ChargerDomain> findAllByStationId(String stationId);
1417
List<ChargerDomain> findByStationID(String stationId);
1518
void save(ChargerDomain chargerDomain);
19+
List<StatisticsData.ChartData> countFaultAndNormalChargers();
20+
21+
ChargerDomain updateChargerStatus(String stationId, Integer evseId, ChargerStatus status);
1622
}

src/main/java/com/example/quaterback/api/domain/charger/repository/JpaChargerRepository.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
package com.example.quaterback.api.domain.charger.repository;
22

3+
import com.example.quaterback.api.domain.charger.constant.ChargerStatus;
34
import com.example.quaterback.api.domain.charger.entity.ChargerEntity;
45
import com.example.quaterback.api.domain.charger.domain.ChargerDomain;
6+
import com.example.quaterback.api.domain.station.constant.StationStatus;
57
import com.example.quaterback.api.domain.station.entity.ChargingStationEntity;
68
import com.example.quaterback.api.domain.station.repository.ChargingStationRepository;
79
import com.example.quaterback.api.domain.station.repository.SpringDataJpaChargingStationRepository;
10+
import com.example.quaterback.api.feature.statistics.dto.response.StatisticsData;
811
import jakarta.persistence.EntityNotFoundException;
12+
import jakarta.persistence.Transient;
13+
import jakarta.transaction.Transactional;
914
import lombok.RequiredArgsConstructor;
1015
import org.springframework.stereotype.Repository;
1116

@@ -19,6 +24,8 @@
1924
public class JpaChargerRepository implements ChargerRepository {
2025
private final SpringDataJpaChargingStationRepository springDataJpaChargingStationRepository;
2126
private final SpringDataJpaChargerRepository chargerRepository;
27+
private final SpringDataJpaChargerRepository springDataJpaChargerRepository;
28+
2229
@Override
2330
public ChargerDomain findByStationIdAndEvseId(String stationId, Integer evseId) {
2431
ChargerEntity entity = chargerRepository.findByStation_StationIdAndEvseId(stationId, evseId)
@@ -63,4 +70,33 @@ public List<ChargerDomain> findAllByStationId(String stationId) {
6370
.map(ChargerEntity::toDomain)
6471
.toList();
6572
}
73+
74+
@Override
75+
public List<StatisticsData.ChartData> countFaultAndNormalChargers() {
76+
List<Object[]> resultList = chargerRepository.countFaultAndNormalChargers();
77+
Object[] results = resultList.get(0);
78+
double normalChargers = ((Number) results[0]).doubleValue();
79+
double faultChargers = ((Number) results[1]).doubleValue();
80+
return List.of(
81+
StatisticsData.ChartData.builder()
82+
.label("정상")
83+
.value(normalChargers)
84+
.build(),
85+
StatisticsData.ChartData.builder()
86+
.label("고장")
87+
.value(faultChargers)
88+
.build()
89+
);
90+
}
91+
92+
@Override
93+
@Transactional
94+
public ChargerDomain updateChargerStatus(String stationId, Integer evseId, ChargerStatus status) {
95+
ChargerEntity entity = springDataJpaChargerRepository.findOneCharger(stationId, evseId)
96+
.orElseThrow(() -> new EntityNotFoundException("entity not found"));
97+
98+
entity.updateChargerStatus(status);
99+
ChargerEntity updatedEntity = springDataJpaChargerRepository.save(entity);
100+
return updatedEntity.toDomain();
101+
}
66102
}

src/main/java/com/example/quaterback/api/domain/charger/repository/SpringDataJpaChargerRepository.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,15 @@ public interface SpringDataJpaChargerRepository extends JpaRepository<ChargerEnt
1414

1515
@Query("select c from ChargerEntity c where c.station.stationId =:stationId")
1616
List<ChargerEntity> findAllByStationId(@Param("stationId")String stationId);
17+
18+
@Query(value = """
19+
SELECT
20+
SUM(CASE WHEN c.charger_status != 'FAULT' THEN 1 ELSE 0 END) AS faultCount,
21+
SUM(CASE WHEN c.charger_status = 'FAULT' THEN 1 ELSE 0 END) AS normalCount
22+
FROM charger_info c
23+
""", nativeQuery = true)
24+
List<Object[]> countFaultAndNormalChargers();
25+
26+
@Query("select c from ChargerEntity c where c.station.stationId = :stationId and c.evseId = :evseId")
27+
Optional<ChargerEntity> findOneCharger(String stationId, Integer evseId);
1728
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.example.quaterback.api.domain.price.constant;
2+
3+
public enum Season {
4+
SUMMER, SPRING_FALL, WINTER
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.example.quaterback.api.domain.price.constant;
2+
3+
public enum TimeSlot {
4+
OFF_PEAK, MID_PEAK, ON_PEAK
5+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.example.quaterback.api.domain.price.entity;
2+
3+
import com.example.quaterback.api.domain.price.constant.Season;
4+
import com.example.quaterback.api.domain.price.constant.TimeSlot;
5+
import jakarta.persistence.*;
6+
import lombok.*;
7+
8+
@Entity
9+
@Table(name = "kepco_price")
10+
@Getter
11+
@Setter
12+
@NoArgsConstructor
13+
@AllArgsConstructor
14+
@Builder
15+
public class KepcoPrice {
16+
@Id
17+
@GeneratedValue(strategy = GenerationType.IDENTITY)
18+
private long id;
19+
20+
@Enumerated(EnumType.STRING)
21+
private Season season;
22+
23+
@Enumerated(EnumType.STRING)
24+
private TimeSlot timeSlot;
25+
26+
private double pricePerKwh;
27+
}
28+
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.example.quaterback.api.domain.price.entity;
2+
3+
import jakarta.persistence.*;
4+
import lombok.*;
5+
6+
import java.time.LocalDateTime;
7+
8+
@Entity
9+
@Table(name = "cs_price")
10+
@Getter
11+
@Setter
12+
@NoArgsConstructor
13+
@AllArgsConstructor
14+
@Builder
15+
public class PricePerMwh {
16+
@Id
17+
@GeneratedValue(strategy = GenerationType.IDENTITY)
18+
private long id;
19+
20+
private double pricePerMwh;
21+
private LocalDateTime updatedDateTime;
22+
23+
public static PricePerMwh from(double pricePerMwh) {
24+
return PricePerMwh.builder()
25+
.pricePerMwh(pricePerMwh)
26+
.updatedDateTime(LocalDateTime.now())
27+
.build();
28+
}
29+
}

0 commit comments

Comments
 (0)